A la hora de crear una tabla podemos especificar diferentes restricciones. La restricción CHECK en PostgreSQL evalua si una columna cumple con los requisitos establecidos. Cuando se inserte o actualice un dato, internamente usa un booleano para decidir si se cumple con la condición o no y después inserta o actualiza el dato si cumple la condición.
Sintaxis
Para establecer una restricción CHECK al crear una tabla utiliza la siguiente sintaxis:
CREATE TABLE nombreTabla ( id SERIAL PRIMARY KEY, campo1 VARCHAR (50), ... campo2 DATE CHECK (campo2 > '1986-09-26'), campo3 DATE CHECK (campo3 > campo2), campo4 numeric CHECK(campo4 > 0) );
En esta sintaxis se han establecido tres restricciones:
- Campo2 debe ser una fecha mayor de ‘1986-09-26’.
- Campo3 debe ser mayor de Campo2.
- Campo4 debe ser un numero mayor de cero.
Nombre de la restricción
Cuando creas una restricción de tipo CHECK automáticamente se le da un nombre compuesto por tabla_columna_check pero si quieres un nombre especifico puedes especificárselo al crear la restricción:
CREATE TABLE nombreTabla ( id SERIAL PRIMARY KEY, campo1 VARCHAR (50), ... campo2 DATE CONSTRAINT nombreRestriccion CHECK (campo2 >; '1986-09-26'), campo3 DATE CONSTRAINT nombreRestriccion CHECK (campo3 > campo2), campo4 numeric CONSTRAINT nombreRestriccion CHECK(campo4 > 0) );
CHECK de una tabla ya existente
Si ya tienes la tabla creada y quieres modificar un campo para que contenga una restricción check puedes hacerlo utilizando ALTER.
ALTER TABLE nombreTabla ADD CONSTRAINT nombreRestriccion CHECK ( campo1 > 0 AND campo2 >= 0 AND campo3 > campo2 );
En el siguiente ejemplo puedes comprobar como se establece una restricción en la tabla ya existente empleados para que el sueldo sea siempre mayor de cero:
