Postgresql

約束與我的唯一索引有什麼關係?

  • February 28, 2019

我必須在我的桌子上建立索引。第一個是 Django 創建的,第二個是我創建的。我不完全確定CONSTRAINT第一個索引中的額外含義是什麼,並且想知道如何更改我的CREATE INDEX語句以將其添加到其中。

"customers_phonetype_customer_id_176731583d230ba5_uniq" UNIQUE CONSTRAINT, btree (customer_id, display) ;-- Django created
"customers_phonetype_customer_id_uniq" UNIQUE, btree (customer_id, lower(display::text)) ; -- Manually created

這就是我手動創建第二個索引的方式:

create unique index customers_phonetype_customer_id_uniq on customers_phonetype (customer_id, lower(display));

在這種情況下,多餘的單詞是什麼意思CONSTRAINT?我沒有在文件中看到它。

第一個是唯一約束。它可以通過以下方式添加到現有表中:

ALTER TABLE ADD CONSTRAINT ...

手冊中的詳細資訊在這裡

它是使用唯一索引實現的。根據文件:

添加唯一約束將自動在約束中使用的列或列組上創建唯一 btree 索引。僅對某些行的唯一性約束可以通過創建部分索引來實施。

此外,它還允許對其進行外鍵引用。

唯一索引中的第二個。

它不能是唯一約束,因為那些只允許列,而不是表達式。更多細節:

引用自:https://dba.stackexchange.com/questions/95038