Los índices también se pueden usar para garantizar la unicidad del valor de una columna, o la unicidad de los valores combinados de más de una columna.
CREATE UNIQUE INDEXnombreONtabla(columna[, ...]) [ NULLS [ NOT ] DISTINCT ];
Actualmente, solo los índices B-tree se pueden declarar únicos.
Cuando un índice se declara único, no se permiten múltiples filas de la tabla con valores indexados
iguales. Por defecto, los valores nulos en una columna única no se consideran
iguales, lo que permite múltiples valores nulos en la columna. La opción
NULLS NOT DISTINCT modifica esto y hace que el
índice trate los nulos como iguales. Un índice único multicolumna solo rechazará
los casos en los que todas las columnas indexadas sean iguales en varias filas.
PostgreSQL crea automáticamente un índice único cuando se define una restricción única o una clave primaria para una tabla. El índice cubre las columnas que componen la clave primaria o la restricción única (un índice multicolumna, si corresponde), y es el mecanismo que hace cumplir la restricción.
No hay necesidad de crear manualmente índices en columnas únicas; hacerlo solo duplicaría el índice creado automáticamente.