web-dev-qa-db-fra.com

Contraint de colonne unique personnalisée, uniquement appliquée si une colonne a une valeur spécifique

Est-il possible d'avoir une contrainte de colonne unique personnalisée comme suit? Supposons que j'ai deux cols, subset et type, les deux chaînes (bien que les types de données ne comptent probablement pas).

Si type est "vrai", je veux alors que la combinaison de type et subset soit unique. Sinon, il n'y a pas de contrainte. J'utilise PostgreSQL 8.4 sur Debian.

19
Faheem Mitha

En d'autres termes, vous voulez subset d'être unique si type = 'true'.
[.____] A Index unique partiel fera cela:

CREATE UNIQUE INDEX tbl_some_name_idx ON tbl (subset) WHERE type = 'true';

De cette façon, vous pouvez même faire des combinaisons avec NULL unique, qui n'est pas possible, sinon détaillé dans cette réponse connexe:
[.____] Valeurs uniques de PostgreSQL multi-colonnes et valeurs NULL

31
Erwin Brandstetter