PostgreSQL CREATE TRIGGER

Resumen: en este tutorial, aprenderá a utilizar la sentencia PostgreSQL CREATE TRIGGER para crear un trigger.

Para crear un nuevo trigger en PostgreSQL, siga estos pasos:

  • Primero, cree una función trigger utilizando la sentencia CREATE FUNCTION.
  • Segundo, vincule la función trigger a una tabla usando la sentencia CREATE TRIGGER.

Si no está familiarizado con la creación de una función definida por el usuario, puede consultar la sección PL/pgSQL.

Sintaxis de la función trigger

Una función trigger es similar a una función regular definida por el usuario. Sin embargo, una función de disparo no toma ningún argumento y tiene un valor de retorno con el tipo trigger.

Lo siguiente ilustra la sintaxis de la creación de la función de disparo:

Code language: SQL (Structured Query Language) (sql)

Tenga en cuenta que puede crear una función de disparo utilizando cualquier lenguaje soportado por PostgreSQL. En este tutorial, utilizaremos PL/pgSQL.

Una función trigger recibe datos sobre su entorno de llamada a través de una estructura especial llamada TriggerData que contiene un conjunto de variables locales.

Por ejemplo, OLD y NEW representan los estados de la fila en la tabla antes o después del evento desencadenante.

PostgreSQL también proporciona otras variables locales precedidas por TG_ como TG_WHEN, y TG_TABLE_NAME.

Una vez que defina una función de disparo, puede vincularla a uno o más eventos de disparo como INSERT, UPDATE y DELETE.

Introducción a la sentencia PostgreSQL CREATE TRIGGER

La sentencia CREATE TRIGGER crea un nuevo disparo. Lo siguiente ilustra la sintaxis básica de la sentencia CREATE TRIGGER:

Code language: SQL (Structured Query Language) (sql)

En esta sintaxis:

Primero, especifique el nombre del disparador después de las palabras clave TRIGGER.

Segundo, especifique la sincronización que causa el disparo. Puede ser BEFORE o AFTER un evento ocurre.

Tercero, especifique el evento que invoca el gatillo. El evento puede ser INSERT , DELETE, UPDATE o TRUNCATE.

Cuarto, especifique el nombre de la tabla asociada al trigger después de la palabra clave ON.

En quinto lugar, especifique el tipo de disparadores que pueden ser:

  • Disparador a nivel de fila que se especifica mediante la cláusula FOR EACH ROW.
  • Disparador a nivel de estado que se especifica mediante la cláusula FOR EACH STATEMENT.

Un trigger a nivel de fila se dispara por cada fila mientras que un trigger a nivel de sentencia se dispara por cada transacción.

Supongamos que una tabla tiene 100 filas y dos triggers que se dispararán cuando se produzca un evento DELETE.

Si la sentencia DELETE elimina 100 filas, el trigger a nivel de fila se disparará 100 veces, una por cada fila eliminada. Por otro lado, un trigger a nivel de sentencia se disparará una vez independientemente de cuántas filas se eliminen.

Por último, especifique el nombre de la función de trigger después de las palabras clave EXECUTE PROCEDURE.

PostgreSQL CREATE TRIGGER ejemplo

La siguiente sentencia crear una nueva tabla llamada employees:

Code language: SQL (Structured Query Language) (sql)

Suponga que cuando el nombre de un empleado cambia, desea registrar los cambios en una tabla separada llamada employee_audits :

Code language: SQL (Structured Query Language) (sql)

Primero, cree una nueva función llamada log_last_name_changes:

Code language: SQL (Structured Query Language) (sql)

La función inserta el antiguo apellido en la tabla employee_audits incluyendo el id del empleado, el apellido y la hora del cambio si el apellido de un empleado cambia.

El OLD representa la fila antes de la actualización mientras que el NEW representa la nueva fila que se actualizará. El OLD.last_name devuelve el apellido antes de la actualización y el NEW.last_name devuelve el nuevo apellido.

Segundo, vincula la función de disparo a la tabla employees. El nombre del trigger es last_name_changes. Antes de que se actualice el valor de la columna last_name, se invoca automáticamente la función desencadenante para registrar los cambios.

Code language: SQL (Structured Query Language) (sql)

Tercero, inserte algunas filas en la tabla employees:

Code language: SQL (Structured Query Language) (sql)

Cuarto, examine el contenido de la tabla employees:

Code language: SQL (Structured Query Language) (sql)

Suponga que Lily Bush cambia su apellido a Lily Brown.

Quinto, actualiza el apellido de Lily al nuevo:

Code language: SQL (Structured Query Language) (sql)

Séptimo, comprueba si el apellido de Lily se ha actualizado:

Code language: SQL (Structured Query Language) (sql)

Como puedes ver en la salida, el apellido de Lily se ha actualizado.

En octavo lugar, verifique el contenido de la tabla employee_audits:

Code language: SQL (Structured Query Language) (sql)

El cambio fue registrado en la tabla employee_audits por el disparador.

En este tutorial, ha aprendido a utilizar el CREATE TRIGGER de PostgreSQL para crear un nuevo trigger.

  • ¿Ha sido útil este tutorial?
  • SíNo

Deja una respuesta

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