Les index peuvent aussi être utilisés pour garantir l'unicité des valeurs d'une colonne, ou l'unicité des valeurs combinées de plusieurs colonnes.
CREATE UNIQUE INDEXnom
ONtable
(colonne
[, ...]) [ NULLS [ NOT ]optional> DISTINCT ];
À ce jour, seuls les index B-tree peuvent être déclarés uniques.
Lorsqu'un index est déclaré unique, il ne peut exister plusieurs lignes
d'une table qui possèdent la même valeur indexée. Par défaut, les valeurs
NULL dans une colonne d'unicité ne sont pas considérées comme égales,
permettant ainsi plusieurs valeurs NULL dans la colonne. L'option
NULLS NOT DISTINCT
modifie ceci et fait que l'index
traite les valeurs NULL comme identiques. Un index d'unicité multicolonne
ne rejette que les cas où toutes les colonnes indexées sont égales sur
plusieurs lignes.
PostgreSQL crée automatiquement un index d'unicité à la déclaration d'une contrainte d'unicité ou d'une clé primaire sur une table. L'index porte sur les colonnes qui composent la clé primaire ou la contrainte d'unicité (au besoin, il s'agit d'un index multicolonne). C'est cet index qui assure le mécanisme de vérification de la contrainte.
Il n'est pas nécessaire de créer manuellement un index sur les colonnes uniques. Cela duplique l'index créé automatiquement.