SUMEN: Este artículo trata sobre los triggers en PostgreSQL. Describe los diferentes tipos de triggers y proporciona ejemplos para cada uno:

1. Tipos de Triggers

2. Creación de un Trigger

1. Trigger de evento INSERT

2. Trigger de evento UPDATE

. Disparador de eventos UPDATE

3. Disparador de eventos DELETE

4. Eliminación de un disparador

5. Usos de los Triggers

6. Puntos importantes a recordar

Un «trigger» se define como cualquier evento que establece un curso de acción en un movimiento.

En PostgreSQL, si se quiere tomar una acción en eventos específicos de la base de datos, como INSERT, UPDATE, DELETE o TRUNCATE, entonces la funcionalidad de trigger puede ser útil ya que invocará la función requerida en los eventos definidos.

El trigger se asociará a la tabla, vista o tabla ajena especificada y ejecutará la función especificada cuando se realicen determinadas operaciones en esa tabla. Dependiendo del requerimiento podemos crear el trigger ANTES, DESPUÉS o ANTES de los eventos/operaciones.

Tipos de Triggers

1. Disparador a nivel de fila: Si el trigger está marcado como FOR EACH ROW entonces la función trigger será llamada por cada fila que esté siendo modificada por el evento.

Por ejemplo: Si actualizamos 100 filas en la tabla, la función del trigger UPDATE será llamada 100 veces, una vez por cada fila actualizada.

2. Trigger de nivel de declaración: La opción FOR EACH STATEMENT llamará a la función trigger sólo una vez por cada sentencia, independientemente del número de filas que se modifiquen.

Creación de un Trigger

El comando SQL CREATE TRIGGER crea un trigger en el objeto especificado.

La sintaxis del CREATE TRIGGER es la siguiente:

CREATE TRIGGER name { BEFORE | AFTER | INSTEAD OF } { event }ON table_name ] transition_relation_name } ] { ROW | STATEMENT } ]EXECUTE { FUNCTION | PROCEDURE } function_name ( arguments ) where event can be one of: INSERTUPDATE ]DELETETRUNCATE

Para una descripción más detallada y las opciones disponibles, consulte la documentación de PostgreSQL en https://www.postgresql.org/docs/12/sql-createtrigger.html.

1. Trigger de evento INSERT

El trigger de evento INSERT se llama cuando se añade un nuevo registro a una tabla utilizando la sentencia INSERT.

Ejemplo

Vamos a ver un ejemplo de creación de un nuevo trigger. En este ejemplo, vamos a crear una nueva tabla llamada «Empleado» de la siguiente manera:

CREATE TABLE "Employee"("EmployeeId" INT NOT NULL,"LastName" VARCHAR(20) NOT NULL,"FirstName" VARCHAR(20) NOT NULL,"Title" VARCHAR(30),"ReportsTo" INT,"BirthDate" TIMESTAMP,"HireDate" TIMESTAMP,"Address" VARCHAR(70),"City" VARCHAR(40),"State" VARCHAR(40),"Country" VARCHAR(40),"PostalCode" VARCHAR(10),"Phone" VARCHAR(24),"Fax" VARCHAR(24),"Email" VARCHAR(60),CONSTRAINT "PK_Employee" PRIMARY KEY ("EmployeeId"));CREATE TABLE "Employee_Audit"("EmployeeId" INT NOT NULL,"LastName" VARCHAR(20) NOT NULL,"FirstName" VARCHAR(20) NOT NULL,"UserName" VARCHAR(20) NOT NULL,"EmpAdditionTime" VARCHAR(20) NOT NULL,);

Vamos a crear un trigger que pueda añadir una entrada en la tabla «Employee_Audit» si se inserta un nuevo registro de empleado en la tabla «Empleado». Vamos a registrar los detalles del nombre de usuario, que va a añadir el registro en la tabla «Employee».

Agregar una función de disparo y el comando CREATE TRIGGER:

CREATE OR REPLACE FUNCTION employee_insert_trigger_fnc() RETURNS trigger AS$$BEGIN INSERT INTO "Employee_Audit" ( "EmployeeId", "LastName", "FirstName","UserName" ,"EmpAdditionTime") VALUES(NEW."EmployeeId",NEW."LastName",NEW."FirstName",current_user,current_date);RETURN NEW;END;$$LANGUAGE 'plpgsql';CREATE TRIGGER employee_insert_trigger AFTER INSERT ON "Employee" FOR EACH ROW EXECUTE PROCEDURE employee_insert_trigger_fnc();

Una vez que creamos el gatillo INSERT arriba en la tabla, añadirá una nueva entrada a la tabla «Employee_Audit» con estos detalles:

trigger_demo=# INSERT INTO "Employee" VALUES(10,' Adams','Andrew','Manager',1,'1962-02-18 00:00:00','2010-08-14 00:00:00','11120 Jasper Ave NW','Edmonton','AB','Canada','T5K 2N1','+1 780 428-9482','+1 780 428-3457','[email protected]');INSERT 0 1trigger_demo=# select * from "Employee" where "EmployeeId" =10;--------------------EmployeeId | 10LastName | AdamsFirstName | AndrewTitle | ManagerReportsTo | 1BirthDate | 1962-02-18 00:00:00HireDate | 2010-08-14 00:00:00Address | 11120 Jasper Ave NWCity | EdmontonState | ABCountry | CanadaPostalCode | T5K 2N1Phone | +1 780 428-9482Fax | +1 780 428-3457Email | [email protected]_demo=#trigger_demo=# select * from "Employee_Audit" ;----+-----------EmployeeId | 10LastName | AdamsFirstName | AndrewUserName | postgresEmpAdditionTime | 2019-11-10

2. Trigger de evento UPDATE

El trigger de evento UPDATE se llama en el momento de la ejecución de la sentencia UPDATE.

Ejemplo

CREATE TRIGGER verify_user_for_update BEFORE UPDATE ON "Employee" FOR EACH ROWEXECUTE PROCEDURE employee_verify_user_priv();

3. DELETE event Trigger

Este es el trigger de evento DELETE, que se puede añadir en las transacciones que BORRAN los registros.

Ejemplo

CREATE TRIGGER employee_delete_trigger AFTER DELETE ON "Employee" FOR EACH ROW EXECUTE PROCEDURE aft_delete();

Dropping a Trigger

DROP TRIGGER se utiliza para eliminar un trigger. La sintaxis es muy simple.

drop trigger employee_insert_trigger on "Employee" ;

Usos de los Triggers

1. Auditoría: Puede utilizar disparadores para rastrear las transacciones de la tabla mediante el registro de los detalles del evento.

2. Forzar la restricción de verificación: Puede crear un disparador mediante el cual puede comprobar las restricciones antes de aplicar la transacción a la tabla.

3. Población automática: Mediante el uso de disparadores también puede auto poblar los campos de las tablas por la manipulación de nuevos registros de transacciones.

Puntos importantes a recordar

1. Para crear un desencadenante en una tabla, el usuario debe tener el privilegio TRIGGER en la tabla y el privilegio EXECUTE en la función del desencadenante.

2. Puede consultar el catálogo del sistema «pg_trigger» para ver la información del desencadenante existente en la base de datos.

3. Si crea varios desencadenantes en el mismo objeto para el mismo evento, esos desencadenantes se dispararán en orden alfabético por nombre.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.