PostgreSQL Activadores: crear, enumerar y eliminar con ejemplo

¿Qué es el gatillo? PostgreSQL?

A PostgreSQL Desencadenar es una función que se activa automáticamente cuando ocurre un evento de base de datos en un objeto de base de datos. Por ejemplo, una mesa. Ejemplos de eventos de base de datos que pueden activar un disparador incluyen INSERTAR, ACTUALIZAR, ELIMINAR, etc. Además, cuando crea un disparador para una tabla, el disparador se eliminará automáticamente cuando se elimine esa tabla.

Cómo se utiliza Trigger en PostgreSQL?

Un disparador puede marcarse con el operador FOR EACH ROW durante su creación. Dicho disparador se llamará una vez por cada fila modificada por la operación. Un disparador también puede marcarse con el operador FOR EACH STATEMENT durante su creación. Este disparador se ejecutará solo una vez para una operación específica.

PostgreSQL crear activador

Para crear un disparador, usamos la función CREAR DISPARADOR. Aquí está la sintaxis de la función:

CREATE TRIGGER trigger-name [BEFORE|AFTER|INSTEAD OF] event-name  
ON table-name  
[  
 -- Trigger logic  
];

El nombre del disparador es el nombre del disparador.

ANTES, DESPUÉS y EN LUGAR DE son palabras clave que determinan cuándo se invocará el activador.

El nombre del evento es el nombre del evento que hará que se invoque el disparador. Esto puede ser INSERT, ACTUALIZAR, ELIMINAR, etc.

El nombre de la tabla es el nombre de la tabla en la que se creará el activador.

Si se va a crear el disparador para una operación INSERT, debemos agregar el parámetro ON column-name.

La siguiente sintaxis demuestra esto:

CREATE TRIGGER trigger-name AFTER INSERT ON column-name  
ON table-name  
[  
 -- Trigger logic
];

PostgreSQL Crear ejemplo de activador

Usaremos la tabla de precios que se proporciona a continuación:

Precio:

PostgreSQL crear activador

Creemos otra tabla, Price_Audits, donde registraremos los cambios realizados en la tabla Price:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
);

Ahora podemos definir una nueva función llamada auditfunc:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql;

La función anterior insertará un registro en la tabla Price_Audits, incluida la nueva identificación de fila y la hora en que se creó el registro.

Ahora que tenemos la función de activación, debemos vincularla a nuestra tabla de precios. Le daremos al activador el nombre price_trigger. Antes de crear un nuevo registro, la función de activación se invocará automáticamente para registrar los cambios. Aquí está el desencadenante:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc();

Insertemos un nuevo registro en la tabla de Precios:

INSERT INTO Price 
VALUES (3, 400);

Ahora que hemos insertado un registro en la tabla Price, también se debe insertar un registro en la tabla Price_Audit. Esto será como resultado del disparador que hemos creado en la tabla de Precios. Comprobemos esto:

SELECT * FROM Price_Audits;

Esto devolverá lo siguiente:

PostgreSQL crear activador

El disparador funcionó con éxito.

Activador de lista de Postgres

Todos los desencadenantes que crees en PostgreSQL se almacenan en la tabla pg_trigger. Para ver la lista de activadores que tiene en el base de datos, consulte la tabla ejecutando el comando SELECT como se muestra a continuación:

SELECT tgname FROM pg_trigger;

Esto devuelve lo siguiente:

Activador de lista de Postgres

La columna tgname de la tabla pg_trigger indica el nombre del disparador.

Disparador de caída de Postgres

para dejar caer un PostgreSQL disparador, utilizamos la instrucción DROP TRIGGER con la siguiente sintaxis:

DROP TRIGGER [IF EXISTS] trigger-name 
ON table-name [ CASCADE | RESTRICT ];

El parámetro nombre del activador indica el nombre del activador que se va a eliminar.

El nombre de la tabla indica el nombre de la tabla de la que se eliminará el activador.

La cláusula IF EXISTS intenta eliminar un activador que existe. Si intenta eliminar un activador que no existe sin utilizar la cláusula IF EXISTS, obtendrá un error.

La opción CASCADA le ayudará a eliminar automáticamente todos los objetos que dependen del disparador.

Si utiliza la opción RESTRICT, el activador no se eliminará si los objetos dependen de él.

Por Ejemplo:

Para eliminar el disparador llamado example_trigger en la tabla Price, ejecutamos el siguiente comando:

Para colocar el disparador llamado example_trigger en la tabla Company, ejecute el siguiente comando:

DROP TRIGGER example_trigger IF EXISTS
ON Company;

Usando pgAdmin

Ahora veamos cómo se realizaron las tres acciones usando pgAdmin.

Cómo crear un disparador en PostgreSQL usando pgAdmin

Así es como puedes crear un disparador en Postgres usando pgAdmin:

Paso 1) Inicie sesión en su cuenta pgAdmin

Abra pgAdmin e inicie sesión en su cuenta usando sus credenciales

Paso 2) Cree una base de datos de demostración

  1. Desde la barra de navegación de la izquierda, haga clic en Bases de datos.
  2. Haga clic en Demostración.

Crear disparador en PostgreSQL usando pgAdmin

Paso 3) Escriba la consulta

Para crear la tabla Price_Audits, escriba la consulta en el editor:

CREATE TABLE Price_Audits (
   book_id INT NOT NULL,
    entry_date text NOT NULL
)

Paso 4) Ejecutar la consulta

Haga clic en el botón Ejecutar

Crear disparador en PostgreSQL usando pgAdmin

Paso 5) Ejecute el código para auditfunc

Ejecute el siguiente código para definir la función auditfunc:

CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$
   BEGIN
      INSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);
      RETURN NEW;
   END;
$my_table$ LANGUAGE plpgsql

Paso 6) Ejecute el código para crear un disparador

Ejecute el siguiente código para crear el disparador price_trigger:

CREATE TRIGGER price_trigger AFTER INSERT ON Price
FOR EACH ROW EXECUTE PROCEDURE auditfunc()

Paso 7) Insertar un nuevo registro

  1. Ejecute el siguiente comando para insertar un nuevo registro en la tabla de precios:
    INSERT INTO Price
    VALUES (3, 400)
  2. Ejecute el siguiente comando para verificar si se insertó un registro en la tabla Price_Audits:
    SELECT * FROM Price_Audits

    Esto debería devolver lo siguiente:

Crear disparador en PostgreSQL usando pgAdmin

Paso 8) Verifique el contenido de la tabla

Comprobemos el contenido de la tabla Price_Audits:

Listado de activadores usando pgAdmin

Paso 1) Ejecute el siguiente comando para comprobar los activadores en su base de datos:

SELECT tgname FROM pg_trigger

Esto devuelve lo siguiente:

Listado de activadores usando pgAdmin

Eliminar desencadenadores usando pgAdmin

Para colocar el disparador llamado example_trigger en la tabla Company, ejecute el siguiente comando:

DROP TRIGGER example_trigger IF EXISTS
ON Company

Resum

  • A PostgreSQL disparador se refiere a una función que se activa automáticamente cuando ocurre un evento de base de datos en un objeto de base de datos, como una tabla.
  • Ejemplos de tales eventos de bases de datos incluyen INSERTAR, ACTUALIZAR, ELIMINAR, etc.
  • Un desencadenador sólo existe durante la vida útil del objeto de base de datos para el que fue creado.
  • Si se elimina el objeto de la base de datos, el activador también se eliminará.
  • PostgreSQL Los desencadenantes se crean utilizando la instrucción CREATE TRIGGER.
  • Cada disparador está asociado con una función que indica qué hará el disparador cuando se invoque.

Descargue la Base de Datos utilizada en este Tutorial