Как установить внешний ключ для последовательного идентификатора - PullRequest
3 голосов
/ 24 октября 2011

У меня есть следующее определение таблицы для journal

CREATE TABLE "public"."journal" (
"id" "public"."inc_journal" NOT NULL,
"short_desc" varchar(20),
"description" varchar(1000),
"default_gl_account_id" int8,
"company_id" int2,
"creator_user_id" int4,
"created_date" timestamp(6),
"type" "public"."journal_type",
CONSTRAINT "journal_pkey" PRIMARY KEY ("id")
)
WITH (OIDS=FALSE)
;

Определение для inc_journal представляет собой последовательность, подобную следующей:

CREATE SEQUENCE "public"."inc_journal"
 INCREMENT 1
 MINVALUE 1
 MAXVALUE 4294967295
 START 1
 CACHE 1;

И я хочу установить для него внешний ключ так:

ALTER TABLE "public"."entry"
ADD FOREIGN KEY ("journal_id") REFERENCES "public"."journal" ("id");

Однако, когда я делаю это, я получаю сообщение об ошибке:

[Err] ОШИБКА: ограничение внешнего ключа "entry_journal_id_fkey" не может быть реализовано
ПОДРОБНЕЕ: Ключевые столбцы «journal_id» и «id» имеют несовместимые типы: integer и inc_journal.

Как мне избавиться от этой ошибки?
Нужно ли для journal_id набирать inc_journal? Я хотел бы все еще вставить null в поле, так что это не правильный вариант.

1 Ответ

4 голосов
/ 24 октября 2011

Попробуйте использовать тип поля serial для вашего PKey или

id integer NOT NULL DEFAULT nextval('inc_journal')

Это создаст / использует последовательность для вашего PKey.Затем вы можете FKey любые целые поля, которые вы хотите.Смотри также http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...