Eu gostaria de adicionar uma restrição que impõe exclusividade em uma coluna apenas em uma parte de uma tabela.
ALTER TABLE stop ADD CONSTRAINT myc UNIQUE (col_a) WHERE (col_b is null);
A WHERE
parte acima é um pensamento positivo.
Alguma maneira de fazer isso? Ou devo voltar para a prancheta relacional?
postgresql
constraints
unique-constraint
EoghanM
fonte
fonte
Respostas:
O PostgreSQL não define uma
UNIQUE
restrição parcial (ou seja, condicional) - no entanto, você pode criar um índice parcial exclusivo . PostgreSQL usa índices únicos para implementar restrições únicas, então o efeito é o mesmo, você apenas não verá a restrição listada eminformation_schema
.Veja os índices parciais .
fonte
ERROR: duplicate key value violates unique constraint "stop_myc"
já foi dito que o PG não define uma restrição UNIQUE parcial (isto é, condicional). Além disso, a documentação diz que a forma preferida de adicionar uma restrição única a uma tabela é
ADD CONSTRAINT
Índices ÚnicosExiste uma maneira de implementá-lo usando restrições de exclusão , (agradeça a @dukelion por esta solução)
No seu caso, parecerá
fonte