如何将外键设置为有序的id

时间:2011-10-24 18:10:53

标签: 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)
;

inc_journal的def是这样的序列:

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] ERROR:外键约束“entry_journal_id_fkey”无法实现
  详细信息:键列“journal_id”和“id”属于不兼容的类型:integer和inc_journal。

如何摆脱此错误?
我是否需要将journal_id设置为inc_journal?我还想在字段中插入null,所以这似乎不是正确的选择。

2 个答案:

答案 0 :(得分:4)

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

id integer NOT NULL DEFAULT nextval('inc_journal')

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

答案 1 :(得分:0)

如果您正在使用Sequerize ORM并出现错误,请尝试以下操作。

我犯了一个错误,其中<button onclick = "changeBg()">Change Background colour</button> <script> function changeBg() { if (document.body.style.backgroundColor == "red") { document.body.style.backgroundColor = "green"; } else if (document.body.style.backgroundColor != "green") { document.body.style.backgroundColor = "red"; } } </script> 表的Foreign key fieldproduct表的Primary key field具有不同的类型。当我匹配类型时,它就可以了!

示例

user