A la hora de crear una tabla podemos especificar diferentes restricciones. La restricción UNIQUE en PostgreSQL evalua si en una columna el valor se repite. Si encuentra el valor repetido nos devolverá un fallo cuando intentemos insertar o actualizar la tabla. Cuando agregas la restricción UNIQUE debes saber que PostgreSQL creara un indice automaticamente.
Tabla nueva
Sintaxis
Para establecer una restricción UNIQUE al crear una tabla utiliza la siguiente sintaxis:
CREATE TABLE nombreTabla ( id SERIAL PRIMARY KEY, campo1 VARCHAR (50), campo2 VARCHAR (50) UNIQUE );
Si quieres establecer una restricción única a un grupo de columnas debes utilizar la siguiente sintaxis:
CREATE TABLE nombreTabla ( id SERIAL PRIMARY KEY, campo1 VARCHAR (50), campo2 VARCHAR (50), UNIQUE (campo1, campo2) );
Con la sintaxis anterior estas indicando que la combinación del campo1 y campo2 siempre debe ser único.
Ejemplo
En el siguiente ejemplo puedes comprobar como se crea una restricción única sobre el campo email de la tabla de empleados:
CREATE TABLE empleados ( id_empleado numeric(2,0), email varchar(50) UNIQUE, sueldo integer );

Tabla existente
Sintaxis
Si ya tienes la tabla creada y quieres modificar un campo para que contenga una restricción UNIQUE puedes hacerlo utilizando ALTER, pero antes debes crear un indice y después crear la restricción única:
Para crear el indice usa esta sintaxis:
CREATE UNIQUE INDEX CONCURRENTLY nombreIndice ON nombreTabla (campo);
Para crear la restricción unica usa esta sintaxis:
ALTER TABLE nombreTabla ADD CONSTRAINT nombreRestriccion UNIQUE USING INDEX nombreIndice;
Ejemplo
Imagina que ya tenemos creada la tabla de empleados y queremos aplicar una restricción única al campo email. Deberíamos seguir estos pasos:
CREATE UNIQUE INDEX CONCURRENTLY empleados_email ON empleados (email);

ALTER TABLE empleados ADD CONSTRAINT email_unico UNIQUE USING INDEX empleados_email;
