了解 Postgres 引用完整性错误
在 Postgres(版本 9.1 或更高版本)中构建数据库结构时,您可能会遇到以下错误:
<code>ERROR: there is no unique constraint matching given keys for referenced table "bar"</code>
此错误是由于 Postgres 强制执行引用完整性而引起的,引用完整性是数据库一致性的一个重要方面。 让我们来分析一下原因和解决方法。
引用完整性和外键
引用完整性确保相关表之间的数据一致性。 外键关系在表之间建立链接。 例如,如果表 bar
具有引用表 foo_fk
中的 name
列的外键 foo
,则引用完整性要求 foo_fk
中的每个 bar
值必须对应于name
.foo
唯一约束的作用
为了维护引用完整性,Postgres 需要对引用列(表 中的 name
)进行唯一约束。 此约束保证 foo
中的每个 name
值都是唯一的,允许 Postgres 明确标识引用的行。foo
错误原因:缺少唯一约束
错误消息表明外键引用的列缺少唯一约束。 如果 中的 name
列缺少唯一约束,Postgres 无法可靠地将 foo
中的 foo_fk
值链接到 bar
中的特定行,从而导致错误。foo
解决错误:添加唯一约束
解决方案很简单:向引用的列添加唯一约束。 在 SQL 中,这是使用 和 ALTER TABLE
命令完成的:ADD CONSTRAINT
<code class="language-sql">ALTER TABLE foo ADD CONSTRAINT foo_name_unique UNIQUE (name);</code>
中的 name
列的唯一性,满足 Postgres 对引用完整性的要求并使外键关系能够正确运行。 添加约束后,尝试创建外键关系应该会成功。foo
以上是为什么 Postgres 在创建外键时会抛出'没有匹配给定键的唯一约束”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!