PostgreSQL:Insert违反了外键约束

时间:2017-10-23 14:51:02

标签: postgresql

我正在开发一个我想使用继承的项目(参见下面的代码)

当我尝试在Profile中插入内容时出现错误。

ERROR:  insert or update on table "profile" violates foreign key 
constraint "profile_id_fkey"
DETAIL:  Key (id)=(21) is not present in table "test".

我正在使用PSequel来检查数据库,并且值在父级中可见。但是,我仍然可以在父级中插入重复的主键。插入然后工作。

CREATE TABLE Test ( 
ID INTEGER NOT NULL,
PRIMARY KEY (ID)
);

CREATE TABLE Testchild (
PRIMARY KEY (ID) 
) INHERITS (Test)
;


CREATE TABLE Profile (
ProfileID INTEGER NOT NULL, 
ID INT NOT NULL, 
PRIMARY KEY (ProfileID)
);

ALTER TABLE Profile
ADD FOREIGN KEY (ID) REFERENCES Test(ID);

INSERT INTO Testchild VALUES (21);

INSERT INTO Profile VALUES (1,21);

1 个答案:

答案 0 :(得分:0)

来自PostgreSQL文档:

继承功能的一个严重限制是索引(包括唯一约束)和外键约束仅适用于单个表,而不适用于其继承子项。在外键约束的引用和引用方面都是如此。因此,就上述例子而言:

https://www.postgresql.org/docs/9.1/static/ddl-inherit.html

所以你必须明确声明任何FK,他们不会继承