我正在开发一个我想使用继承的项目(参见下面的代码)
当我尝试在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);
答案 0 :(得分:0)
来自PostgreSQL文档:
继承功能的一个严重限制是索引(包括唯一约束)和外键约束仅适用于单个表,而不适用于其继承子项。在外键约束的引用和引用方面都是如此。因此,就上述例子而言:
https://www.postgresql.org/docs/9.1/static/ddl-inherit.html
所以你必须明确声明任何FK,他们不会继承