Me gustaría agregar una restricción que imponga la unicidad en una columna solo en una parte de una tabla.
ALTER TABLE stop ADD CONSTRAINT myc UNIQUE (col_a) WHERE (col_b is null);
La WHERE
parte de arriba es una ilusión.
¿Alguna forma de hacer esto? ¿O debería volver al tablero de dibujo relacional?
postgresql
constraints
unique-constraint
EoghanM
fuente
fuente
Respuestas:
PostgreSQL no define una
UNIQUE
restricción parcial (es decir, condicional) ; sin embargo, puede crear un índice único parcial . PostgreSQL usa índices únicos para implementar restricciones únicas, por lo que el efecto es el mismo, simplemente no verá la restricción en la listainformation_schema
.Ver índices parciales .
fuente
ERROR: duplicate key value violates unique constraint "stop_myc"
ya se ha dicho que PG no define una restricción ÚNICA parcial (es decir, condicional). Además, la documentación dice que la forma preferida de agregar una restricción única a una tabla son los
ADD CONSTRAINT
índices únicosHay una manera de implementarlo usando restricciones de exclusión (gracias a @dukelion por esta solución)
En tu caso se verá como
fuente