无法在表继承上创建外键约束

时间:2017-05-18 14:32:51

标签: postgresql

我试图将外键约束添加到现有表中:

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)

我专门针对基表(假设它包含所有派生表的数据),因为地址行引用了不同的派生表。

有没有办法让它发挥作用?

或者作为替代方案,有点甚至更好,有没有办法让外键定位到特定的派生表?

0 个答案:

没有答案