¿Es posible tener una restricción de columna única personalizada de la siguiente manera? Supongamos que tengo dos cols subsety typeambas cadenas (aunque los tipos de datos probablemente no importen).
Si typees "verdadero", entonces quiero que la combinación de typey subsetsea ú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
subsetser único sitype = 'true'.Un índice único parcial hará eso:
De esta manera, incluso puede hacer combinaciones con
NULLvalores ú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