Postgresql
約束與我的唯一索引有什麼關係?
我必須在我的桌子上建立索引。第一個是 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 索引。僅對某些行的唯一性約束可以通過創建部分索引來實施。
此外,它還允許對其進行外鍵引用。
唯一索引中的第二個。
它不能是唯一約束,因為那些只允許列,而不是表達式。更多細節:
- PostgreSQL 如何強制執行 UNIQUE 約束/它使用什麼類型的索引?
- 關於 pgsql-general關於約束和索引的區別的討論。