¿Es posible tener una restricción de columna única personalizada de la siguiente manera? Supongamos que tengo dos cols subset
y type
ambas cadenas (aunque los tipos de datos probablemente no importen).
Si type
es "verdadero", entonces quiero que la combinación de type
y subset
sea única. De lo contrario, no hay restricción. Estoy usando PostgreSQL 8.4 en Debian.
postgresql
index
constraint
unique-constraint
postgresql-8.4
Faheem Mitha
fuente
fuente
Respuestas:
En otras palabras, quieres
subset
ser único sitype = 'true'
.Un índice único parcial hará eso:
De esta manera, incluso puede hacer combinaciones con
NULL
valores únicos, que de otra manera no es posible, como se detalla en esta respuesta relacionada:restricción única de múltiples columnas PostgreSQL y valores NULL
fuente
Esto es complementario a la respuesta anterior de Erwin, pero PostgreSQL admite varios tipos de índices. Estos no son generalmente mutuamente excluyentes. Puedes pensar en esto como:
Todos estos se pueden combinar de varias maneras. Todo lo que está haciendo aquí es usar las características únicas y parciales, de modo que le brinde índices únicos parciales (que son extremadamente útiles a medida que los descubre).
Pero suponga que desea tener un índice que no distinga entre mayúsculas y minúsculas en el campo del subconjunto donde el tipo es verdadero. Luego agregaría una definición funcional:
Tenga en cuenta que esto crea un índice único en la salida de la función lower () llamada en el atributo del subconjunto donde type es verdadero.
fuente