Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql postgres错误:在表上插入或更新;xxxxx";违反外键约束“;xxxxx";_Postgresql_Inheritance - Fatal编程技术网

Postgresql postgres错误:在表上插入或更新;xxxxx";违反外键约束“;xxxxx";

Postgresql postgres错误:在表上插入或更新;xxxxx";违反外键约束“;xxxxx";,postgresql,inheritance,Postgresql,Inheritance,你好 我有一个主表BASECOMPANYDATA,其中BASECOMPANYDATA作为主键。这是天生的 2其他表格客户和产品公司。现在我有了我想要的表格联系人 由于客户和产品公司将有0个或更多用户,因此希望与其他2个用户连接 更多联系人。因此,我在CONTACTS中创建了一个FK(BaseCompanyID)并连接到 BASECOMPANYDATA主键(BaseCompanyDataID)。但当我尝试为插入联系人时 存在于CUSTOMERS I中的记录出现以下错误: 错误:表“xxxxx”上的

你好 我有一个主表BASECOMPANYDATA,其中BASECOMPANYDATA作为主键。这是天生的 2其他表格客户和产品公司。现在我有了我想要的表格联系人 由于客户和产品公司将有0个或更多用户,因此希望与其他2个用户连接 更多联系人。因此,我在CONTACTS中创建了一个FK(BaseCompanyID)并连接到 BASECOMPANYDATA主键(BaseCompanyDataID)。但当我尝试为插入联系人时 存在于CUSTOMERS I中的记录出现以下错误: 错误:表“xxxxx”上的插入或更新与“xxxxx”中的外键冲突 详细信息:表“BaseCompanyData”中不存在键(BaseCompanyDataID)=(17)。 此ID存在于上述继承表(BaseCompanyData)中。 有人能解释为什么会这样吗

提前谢谢

PS:我有4张桌子:

1.BASECOMPANYDATA,其中BaseCompanyDataID为主键和一些其他字段。 2.从上表继承的客户,因此它将CustomerID作为主键,并具有BASECOMPANYDATA表的字段,即BaseCompanyDataID等。 3.ProductCompanys继承自BASECOMPANYDATA,因此其字段ProductCompanyID为PK,继承表的字段如BaseCompanyDataID等。
4.联系人ID为PK,BaseCompanyDataID为FK。我尝试用两种不同的方式连接桌面联系人。A.联系人->与客户的BaseCompanyID->BaseCompanyDataID和联系人->与ProductCompanys的BaseCompanyID->BaseCompanyDataID b。联系人->BaseCompanyID与BASECOMPANYDATA->BaseCompanyDataID结果是相同的错误。关于如何使用继承创建FK的任何答案(如果有)。提前感谢

您阅读了继承文档了吗?尤其是
5.8.1。注意事项
部分

类似地,如果指定cities.name引用其他一些表,则此约束不会自动传播到大写字母。在这种情况下,您可以通过手动将相同的引用约束添加到大写字母来解决此问题

编辑:

继承在Postgsresql中只实现了一半。如果要保存键入内容,请在创建表中签出类似于

在你的第一个问题中,我看到推荐人和我说的完全一样。现在你有问题了?嗯

这是我从您的重新发布中获得的伪sql:

base
    baseid

customers(base)
    baseid
    id

products(base)
    baseid
    id

contacts
    id
    baseid references base(baseid)
就用老式的好方法去做吧

base
    id

customers
    base_id references base(id)
    id

products(base)
    base_id references base(id)
    id

contacts
    id
    base_id references base(id)

如果您在问题中添加了一些换行符,或者是表定义中的一个片段,那就太好了。这是我在SQL Server中开始的方式,但我认为使用PostgreSQL的继承是很好的。看来我将回到我在SQL Server中所做的事情。继承有很多问题。