了解 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中文網其他相關文章!