PostgreSQL 外键约束失败:一个独特的约束问题
本文解决了一个常见的 PostgreSQL 9.1 外键约束错误:“错误:没有与引用表“bar”的给定键匹配的唯一约束”。 我们将分析原因并提供解决方案。
该场景涉及三个表:“foo”、“bar”和“baz”。 “foo”有一个主键(“name”)。 “bar”通过“foo_fk”引用“foo”,有自己的主键(“pkey”),以及对(“foo_fk”,“name”)的唯一约束。 “baz”使用“bar_fk”引用“bar”。
错误消息表示无法强制执行“baz”中的外键约束,因为“bar”中的多行可能共享“foo_fk”和“name”的相同值。这违反了引用完整性,因为“baz”中的外键无法唯一标识“bar”中的相应行。
问题源于“bar”中的唯一约束。虽然它在“foo_fk”和“name”的组合中是唯一的,但它不能保证“bar”中“name”的唯一性。 因此,“bar”中可能存在具有相同“名称”但不同“foo_fk”值的多行。
解决方案:
要解决此问题,请向“bar”表中的“name”列添加唯一约束。这确保了每个“name”值都是唯一的,从而使“baz”中的外键约束能够正确运行。 实现此唯一约束后,将正确执行外键关系,防止错误并建立预期的数据库结构。
以上是为什么我的 PostgreSQL 外键引用失败并显示'错误:没有与引用表'bar'的给定键匹配的唯一约束”?的详细内容。更多信息请关注PHP中文网其他相关文章!