tutorial sirve que para descargar postgresql constraints unique-constraint

sirve - Postgresql: restricción condicionalmente única



postgresql tutorial (2)

Me gustaría agregar una restricción que refuerza la exclusividad 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 parte WHERE arriba es una ilusión.

¿Alguna forma de hacer esto? ¿O debería volver al tablero de dibujo relacional?


PostgreSQL no define una restricción UNIQUE (es decir, condicional) parcial; 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 constancia enumerada en information_schema .

CREATE UNIQUE INDEX stop_myc ON stop (col_a) WHERE (col_b is null);

Ver índices parciales .


ya se ha dicho que PG no define una restricción UNICA (es decir, condicional) parcial. También la documentación dice que la forma preferida de agregar una restricción única a una tabla es ADD CONSTRAINT Unique Indexes

La forma preferida de agregar una restricción única a una tabla es ALTER TABLE ... ADD CONSTRAINT. El uso de índices para imponer restricciones únicas podría considerarse un detalle de implementación al que no se debería acceder directamente. Sin embargo, debe tener en cuenta que no es necesario crear índices manualmente en columnas exclusivas; hacerlo así solo duplicaría el índice creado automáticamente.

Hay una forma de implementarlo usando Restricciones de Exclusión (gracias @dukelion por esta solución)

En tu caso, se verá como

ALTER TABLE stop ADD CONSTRAINT stop_col_a_key_part EXCLUDE (col_a WITH =) WHERE (col_b IS null);