Eu tenho uma tabela simples:
create table item (
lan text not null,
disabled date
);
Meu objetivo é garantir exclusividade para a lan
coluna em todas as linhas, onde disabled
é null
.
Eu criei um índice parcial:
create unique index lan_idx on item (lan) where disabled is not null;
Agora tentei adicionar o índice à tabela, mas estou lutando com a sintaxe. (eu peguei o código deste tutorial)
alter table item add constraint lan_idx using index lan_idx;
Isso gera um erro de sintaxe antes de "usar".
Também tentei o seguinte:
alter table item add constraint lan_idx unique using index lan_idx;
Mas isso gera o erro de que uma restrição exclusiva não pode ser criada com um índice parcial.
Alguém pode me dizer o que fiz de errado?
Você não pode definir uma restrição exclusiva (ou chave primária) com base em um índice parcial.
No entanto, para impor a exclusividade da
lan
coluna para todas as linhas não excluídas, o índice exclusivo parcial que você já possui é suficiente.Não há necessidade de adicionar uma restrição.