PostgreSQL外键引用继承表

puk*_*puk 2 sql postgresql inheritance

我试图通过继承来简化我的代码。这是我现在拥有的

DROP SCHEMA PUBLIC CASCADE;
CREATE SCHEMA PUBLIC;

CREATE TABLE student(
   id SERIAL PRIMARY KEY,
   age INT
);

CREATE TABLE engineer(
   id SERIAL PRIMARY KEY,
   studentId INT REFERENCES student (id),
   friend INT REFERENCES student (id)
);

CREATE TABLE artist(
   id SERIAL PRIMARY KEY,
   studentId INT REFERENCES student (id),
   friend INT REFERENCES student (id)
);

INSERT INTO student (age) VALUES (20); --Trying to remove this
INSERT INTO student (age) VALUES (21); --Trying to remove this
INSERT INTO engineer (studentId) VALUES (1);
INSERT INTO artist (studentId,friend) VALUES (2,1);
Run Code Online (Sandbox Code Playgroud)

我不想输入这两行,因此,我使用下面的行

DROP SCHEMA PUBLIC CASCADE;
CREATE SCHEMA PUBLIC;

CREATE TABLE student(
   studentId SERIAL PRIMARY KEY,
   age INT
);

CREATE TABLE engineer(
   id SERIAL PRIMARY KEY,
   friend INT REFERENCES student (studentId)
) INHERITS (student);

CREATE TABLE artist(
   id SERIAL PRIMARY KEY,
   friend INT REFERENCES student (studentId)
) INHERITS (student);

INSERT INTO engineer (id,age) VALUES (DEFAULT,20);
INSERT INTO artist (id,age,friend) VALUES (DEFAULT,20,1);
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误。

psql:test.psql:45: ERROR:  insert or update on table "artist"     
violates foreign key constraint "artist_friend_fkey"
DETAIL:  Key (friend)=(1) is not present in table "student".
Run Code Online (Sandbox Code Playgroud)

这是添加到长长的 Postgres 问题列表的另一个限制吗?

Vao*_*sun 7

是的。查看文档 底部警告部分:

继承特性的一个严重限制是索引(包括唯一约束)和外键约束仅适用于单个表,而不适用于它们的继承子表

  • *达斯维达配音* NOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO (7认同)