Postgresql
如何使用部分索引向表添加約束?
我有一個簡單的表:
create table item ( lan text not null, disabled date );
我的目標是確保
lan
列在所有行中的唯一性,其中disabled
isnull
。我創建了一個部分索引:
create unique index lan_idx on item (lan) where disabled is not null;
現在我嘗試將索引添加到表中,但我在語法上苦苦掙扎。(我從本教程中獲取了程式碼)
alter table item add constraint lan_idx using index lan_idx;
這會在“使用”之前引發語法錯誤。
我還嘗試了以下方法:
alter table item add constraint lan_idx unique using index lan_idx;
但這會引發錯誤,即無法使用部分索引創建唯一約束。
誰能告訴我我做錯了什麼?
您不能基於部分索引定義唯一(或主鍵)約束。
但是,要對所有未刪除的行強制
lan
列的唯一性,您已經擁有的部分唯一索引就足夠了。無需添加約束。