簡體   English   中英

錯誤:違反外鍵約束,父表中不存在鍵(但它是??)

[英]ERROR: violates foreign key constraint, key is not present in parent table (but it is??)

我知道這個問題已經被問過很多次了,但沒有一個答案能解決我的問題。

我正在為 uni 任務創建一個數據庫,通過 pgadmin 4 使用 PostgreSQL,我有一個名為“staff”的表,其中填充了主鍵為“staffd”的員工。 然后我有另一個名為“client_international”的表,其中包含一個與員工表主鍵相關的“員工”外鍵。

嘗試插入客戶端表時,出現以下錯誤:

錯誤:插入或更新表“client_international”違反外鍵約束“intclient_staff_fkey”
詳細信息:鍵 (staff)=(100000024) 不存在於表“staff”中。
SQL 狀態:23503

我確信“100000024”鍵在員工表中......但我仍然收到錯誤消息。 有什么建議? 下面我將粘貼我用來創建員工表和客戶表的代碼,以防有人注意到其中的錯誤。

員工表:

CREATE SEQUENCE staff_seq
    start 100000000
    increment 1;

CREATE TABLE staff 
(
    staffid integer default nextval('staff_seq'),
    firstname varchar(20) NOT NULL,
    lastname varchar(20) NOT NULL,
    "position" varchar(20) NOT NULL,
    mobile varchar(20) NOT NULL,
    email varchar(100) NOT NULL,
    "location" integer NOT NULL,
    CONSTRAINT staff_pkey PRIMARY KEY (staffid)
);

客戶表:

CREATE SEQUENCE client_seq
    start 200000000
    increment 1;

CREATE TABLE client  
(
    clientid integer default nextval('client_seq'),
    company varchar(100) NOT NULL,
    sector varchar(100) NOT NULL,
    pointofcontact varchar(20) NOT NULL,
    mobile varchar(20) NOT NULL,
    email varchar(100) NOT NULL,
    approvalstatus boolean default (false),
    "location" integer NOT NULL,
    staffid integer NOT NULL,
    CONSTRAINT client_pkey PRIMARY KEY (clientid)
);

CREATE TABLE client_international 
(
    CONSTRAINT client_international_pkey PRIMARY KEY (clientid)
) INHERITS ("client");

ALTER TABLE client
ADD CONSTRAINT client_location_fkey FOREIGN KEY ("location") REFERENCES "location" (locationid),
ADD CONSTRAINT client_staff_fkey FOREIGN KEY (staffid) REFERENCES staff (staffid);

ALTER TABLE client_international
ADD CONSTRAINT intclient_location_fkey FOREIGN KEY ("location") REFERENCES "location" (locationid),
ADD CONSTRAINT intclient_staff_fkey FOREIGN KEY (staffid) REFERENCES staff (staffid);

運行以下語句時出現錯誤:

INSERT INTO client_international(company, sector, pointofcontact, mobile, email, approvalstatus, "location", staffid)
VALUES  ('Moores Dogs', 'Border Patrol', 'Carol Moore', '07911 653453', 'jenkinsj@k9solutions.co.uk', 'false', '500000001', '100000024');

這是員工表中條目的屏幕截圖,顯示它肯定在那里:

圖片

外鍵不是“繼承的”。

從手冊中引用

繼承功能的一個嚴重限制是 [...] 外鍵約束僅適用於單個表,而不適用於它們的繼承子表 在外鍵約束的引用側和被引用側都是如此。

(強調我的)

因此,您正在嘗試做的事情根本不受支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM