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