我试图将外键约束添加到现有表中:
ALTER TABLE address
ADD FOREIGN KEY(company_id)
REFERENCES company(company_id) ON DELETE CASCADE DEFERRABLE;
失败了:
ERROR: insert or update on table "address" violates \
foreign key constraint "address_company_id_fkey"
DETAIL: Key (company_id)=(83376) is not present in table "company".
然而,公司表确实拥有该密钥:
DB=> SELECT company_id FROM company WHERE company_id = 83376;
company_id
------------
83376
(1 row)
我怀疑这是由于表继承(旧数据库,非常历史原因),company
是基表,一个派生表是person
表。哪个是包含实际密钥的那个:
DB=> SELECT company_id FROM person WHERE company_id = 83376;
company_id
------------
83376
(1 row)
我专门针对基表(假设它包含所有派生表的数据),因为地址行引用了不同的派生表。
有没有办法让它发挥作用?
或者作为替代方案,有点甚至更好,有没有办法让外键定位到特定的派生表?