如何将外键设置为有序 id

Joh*_*ica 3 postgresql foreign-keys sequence

我有以下表格定义 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)
;
Run Code Online (Sandbox Code Playgroud)

inc_journal 的 def 是一个像这样的序列:

CREATE SEQUENCE "public"."inc_journal"
 INCREMENT 1
 MINVALUE 1
 MAXVALUE 4294967295
 START 1
 CACHE 1;
Run Code Online (Sandbox Code Playgroud)

我希望为它设置一个外键,如下所示:

ALTER TABLE "public"."entry"
ADD FOREIGN KEY ("journal_id") REFERENCES "public"."journal" ("id");
Run Code Online (Sandbox Code Playgroud)

但是,当我这样做时,我收到一个错误:

[Err] 错误:无法实现外键约束“entry_journal_id_fkey”
详细信息:键列“journal_id”和“id”的类型不兼容:整数和 inc_journal。

我如何摆脱这个错误?
我需要设置journal_id为 typeinc_journal吗?我仍然想插入null到该字段中,所以这似乎不是正确的选择。

Rob*_*bin 5

尝试serial为您的 PKey使用字段类型,或

id integer NOT NULL DEFAULT nextval('inc_journal')
Run Code Online (Sandbox Code Playgroud)

这将为您的 PKey 创建/使用一个序列。然后你可以 FKey 任何你想要的整数字段。另请参阅http://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL