Postgresql

如何使用部分索引向表添加約束?

  • April 17, 2019

我有一個簡單的表:

create table item (
 lan      text not null,
 disabled date
);

我的目標是確保lan列在所有行中的唯一性,其中disabledis null

我創建了一個部分索引:

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列的唯一性,您已經擁有的部分唯一索引就足夠了。

無需添加約束。

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