2014-04-04 121 views
1

我在設置表的主鍵時犯了一個錯誤,比如在字段'x'上說。另一個字段,比如字段'y',我放置了一個唯一的約束,並將這個字段的一些其他表引用爲外鍵。刪除唯一約束的問題postgresql

我注意到我的錯誤,並把字段'x'上的主鍵放在'y'上。在這一點上,我意識到我可以刪除'y'上的唯一約束。但是現在我得到了錯誤,告訴我:不能在表'foo'上刪除約束'y'_unique_constraint,因爲其他對象依賴於它。

我嘗試通過做一個事務和'設置所有約束的約束',但沒有幫助。

如何在不從頭開始構建數據庫的情況下移除此約束?據我所見,'y'這個唯一約束現在是多餘的,主鍵在同一個字段上。

+0

好吧,看起來還有其他表中引用唯一'x'列的外鍵。外鍵**要求引用列(set)是唯一的。 – joop

+0

不,情況並非如此,似乎外鍵被引用到唯一約束索引而不是它自己的字段:...取決於索引'y'_unique_constraint。所以我需要以某種方式'告訴'外鍵來引用新創建的主鍵。 – DeniseMeander

+1

你不能對外鍵約束產生任何影響。只要放棄舊的並創建新的。 – joop

回答

0

我一開始並沒有意識到外鍵引用索引而不是字段。所以通過在同一個字段上創建一個新的主鍵並不意味着外鍵會切換到新的索引。

我現在丟棄了使用級聯的唯一約束並重新添加了所有外鍵,它們現在使用主鍵。

+1

外鍵做引用**列**,而不是索引。但要引用一列,該列必須是唯一的。無論是通過一個唯一的約束還是一個主鍵約束 - 都是由一個唯一的索引來強制執行的 –