triggers-postgresql

Triggers PostgreSQL

Me pidieron hace unos días una solución a inserciones en Base de datos, de tal manera que algunos valores que cumplieran ciertas características, se vieran modificados justo antes de almacenarse. Concretamente se trata de hacer que determinados campos de cada tabla se insertaran automáticamente en mayúsculas, teniendo ya toda la lógica de acceso e inserciones en la BD creada.

La solución es bien sencilla. Todos pensamos en un trigger, pero … ¿en postgreSQL?. Sí no hay ningún problema.

Imaginemos que tenemos una tabla PERSONA que tiene entre otros los campos NOMBRE, APELLIDOS, FECHA DE NACIMIENTO y queremos simplemente cambiar el nombre y apellidos de la persona a mayúsculas antes de cada inserción. Pues lo único que tendriamos que crearnos es un TRIGGER que se ejecute antes de cada ÍNSERT o UPDATE y que ejecute una función que cambie a mayúsculas los campos requeridos, es decir:

CREATE OR REPLACE FUNCTION UPPER_PERSONA() RETURNS trigger AS '
BEGIN
NEW.nombre := upper(NEW.nombre);
NEW.apellidos := upper(NEW.apellidos);
RETURN new;
END
' LANGUAGE plpgsql;

CREATE TRIGGER persona BEFORE INSERT or UPDATE
ON persona FOR EACH ROW
EXECUTE PROCEDURE UPPER_PERSONA(nombre, apellido);