我有一个简单的表:
create table item (
lan text not null,
disabled date
);
我的目标是确保lan
列在所有行中的唯一性,其中disabled
is 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
列的唯一性,您已经拥有的部分唯一索引就足够了。无需添加约束。