A la hora de crear una tabla podemos especificar diferentes restricciones. La restricción UNIQUE en PostgreSQL evalúa 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 creará un índice automáticamente.
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 cómo 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 índice y después crear la restricción única:
Para crear el índice 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;