Postgresql: Conditionnellement contrainte unique
Je voudrais ajouter une contrainte qui impose l'unicité sur une colonne dans un tableau.
ALTER TABLE stop ADD CONSTRAINT myc UNIQUE (col_a) WHERE (col_b is null);
La WHERE
partie ci-dessus est un vœu pieux.
Toute façon de faire cela? Ou dois-je retourner à l'relationnel planche à dessin?
- Fait couramment. Voir "partielle index unique"
- non, c'est un habitué de la contrainte unique. L'affiche veut partielle de la contrainte unique.
Vous devez vous connecter pour publier un commentaire.
PostgreSQL ne définit pas une partielle (c'est à dire conditionnelle)
UNIQUE
contrainte - cependant, vous peut créer une partielle unique indice. PostgreSQL utilise les index uniques pour mettre en œuvre les contraintes unique, de sorte que l'effet est le même, vous ne voyez pas la contrainte répertoriés dansinformation_schema
.Voir partielle index.
ERROR: duplicate key value violates unique constraint "stop_myc"
il a déjà été dit que le PG ne définit pas une partielle (ie conditionnel) contrainte UNIQUE. La documentation dit que la meilleure façon d'ajouter une contrainte unique à une table est
ADD CONSTRAINT
Les Index UniquesIl existe un moyen de le mettre en œuvre à l'aide de Contraintes D'Exclusion, (merci @dukelion pour cette solution)
Dans votre cas, il va ressembler à