Contrainte UNIQUE PostgreSQL

Résumé: dans ce tutoriel, vous découvrirez la contrainte PostgreSQL UNIQUE pour vous assurer que les valeurs stockées dans une colonne ou un groupe de colonnes sont uniques sur les lignes d’une table.

Parfois, vous voulez vous assurer que les valeurs stockées dans une colonne ou un groupe de colonnes sont uniques dans toute la table, telles que les adresses e-mail ou les noms d’utilisateur.

PostgreSQL vous fournit la contrainte UNIQUE qui maintient correctement l’unicité des données.

Lorsqu’une contrainte UNIQUE est en place, chaque fois que vous insérez une nouvelle ligne, elle vérifie si la valeur est déjà dans la table. Il rejette la modification et émet une erreur si la valeur existe déjà. Le même processus est effectué pour la mise à jour des données existantes.

Lorsque vous ajoutez une contrainte UNIQUE à une colonne ou à un groupe de colonnes, PostgreSQL crée automatiquement un index unique sur la colonne ou le groupe de colonnes.

Exemple de contrainte UNIQUE PostgreSQL

L’instruction suivante crée une nouvelle table nommée person avec une contrainte UNIQUE pour la colonne email.

Code language: SQL (Structured Query Language) (sql)

Notez que la contrainte UNIQUE ci-dessus peut être réécrite en tant que contrainte de table comme indiqué dans la requête suivante:

Code language: SQL (Structured Query Language) (sql)

Tout d’abord, insérez une nouvelle ligne dans la table person à l’aide de l’instruction INSERT:

Code language: SQL (Structured Query Language) (sql)

Deuxièmement, insérez une autre ligne avec un e-mail en double.

Code language: SQL (Structured Query Language) (sql)

PostgreSQL a émis un message d’erreur.

Code language: SQL (Structured Query Language) (sql)

Création d’une contrainte UNIQUE sur plusieurs colonnes

PostgreSQL vous permet de créer une contrainte UNIQUE sur un groupe de colonnes en utilisant la syntaxe suivante:

Code language: SQL (Structured Query Language) (sql)

La combinaison des valeurs des colonnes c2 et c3 sera unique dans toute la table. La valeur de la colonne c2 ou c3 ne doit pas être unique.

Ajout d’une contrainte unique à l’aide d’un index unique

Parfois, vous pouvez ajouter une contrainte unique à une colonne ou un groupe de colonnes existant. Jetons un coup d’œil à l’exemple suivant.

Tout d’abord, supposons que vous ayez une table nommée equipment:

Code language: SQL (Structured Query Language) (sql)

Deuxièmement, créez un index unique basé sur la colonne equip_id.

Code language: SQL (Structured Query Language) (sql)

Troisièmement, ajoutez une contrainte unique à la table equipment à l’aide de l’index equipment_equip_id.

Code language: SQL (Structured Query Language) (sql)

Notez que l’instruction ALTER TABLE acquiert un verrou exclusif sur la table. Si vous avez des transactions en attente, il attendra la fin de toutes les transactions avant de changer la table. Par conséquent, vous devez vérifier la table pg_stat_activity pour voir les transactions en attente en cours en utilisant la requête suivante:

Code language: SQL (Structured Query Language) (sql)

Vous devriez regarder le résultat pour trouver la colonne state avec la valeur idle in transaction. Ce sont les transactions qui sont en attente d’achèvement.

Dans ce tutoriel, vous avez appris les contraintes UNIQUE et comment les utiliser pour appliquer des valeurs stockées dans une colonne ou un groupe de colonnes uniques sur les lignes d’une même table.

  • Ce tutoriel a-t-il été utile?
  • Ouinon



+