[英]How can I add a foreign key constrain on a inherited table in postgresql?
[英]PostgreSQL foreign key references inherited table
我試圖通過繼承簡化我的代碼。 這是我現在所擁有的
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);
我不想鍵入這兩行,因此,我正在使用以下行
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);
但是我收到以下錯誤。
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".
這是添加到一長串Postgres問題中的又一個限制嗎?
是。 看一下文檔“底部警告”部分:
繼承功能的一個嚴重限制是索引(包括唯一約束)和外鍵約束僅適用於單個表,不適用於它們的繼承子級
我想我找到了解決方法。 我只是像這樣將參考移到了父項中
DROP SCHEMA PUBLIC CASCADE;
CREATE SCHEMA PUBLIC;
CREATE TABLE student(
studentId SERIAL PRIMARY KEY,
age INT,
friend INT REFERENCES student (studentId)
);
CREATE TABLE engineer(
id SERIAL PRIMARY KEY
) INHERITS (student);
CREATE TABLE artist(
id SERIAL PRIMARY KEY
) INHERITS (student);
INSERT INTO engineer (id,age) VALUES (DEFAULT,20);
INSERT INTO artist (id,age,friend) VALUES (DEFAULT,20,1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.