解码 PostgreSQL 错误:“引用表‘bar’没有唯一约束”
PostgreSQL 9.1 用户在构建互连表时经常遇到这个令人困惑的错误:“没有与引用表“bar”的给定键匹配的唯一约束。”本指南解释了根本原因和解决方案。
当表(例如,foo
、bar
、baz
)通过外键链接时,通常会出现错误。 例如,bar
可能使用外键 (foo
) 引用 foo_fk
,而 baz
使用另一个外键 (bar
) 引用 bar_fk
。
问题出在bar
表中。 虽然组合列上可能存在唯一索引(例如 foo_fk
和 name
),但 name
列本身缺少唯一约束。
考虑这种情况:bar
中的两行共享相同的 name
值(例如“ams”)。 尝试在 baz
中插入一行并引用 bar_fk
中的“ams”会产生歧义。 PostgreSQL 无法确定正确的 bar
行,从而导致错误。
解决方案:强制唯一性
修复方法很简单:向 name
表中的 bar
列添加唯一约束。 使用此 SQL 命令:
<code class="language-sql">ALTER TABLE bar ADD UNIQUE (name);</code>
这可确保每个 bar
行都有唯一的 name
,从而解决歧义并实现成功的外键关系。 您的表结构现在将按预期运行。
以上是为什么 PostgreSQL 会抛出'引用表'bar'没有唯一约束”以及如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!