¿Qué son los activadores de Postgresql?
Un disparador de PostgreSQL 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 INSERT, UPDATE, DELETE, etc. Además, cuando crea un disparador para una tabla, el disparador se eliminará automáticamente cuando esa tabla se elimine.
En este tutorial de PostgreSQL, aprenderá lo siguiente:
- ¿Qué son los activadores de Postgresql?
- ¿Cómo se usa Trigger en POSRGREQL?
- Crear un disparador
- Usando pgAdmin
- Soltar disparadores
¿Cómo se usa Trigger en POSRGREQL?
Un disparador se puede marcar con el operador PARA CADA FILA durante su creación. Dicho disparador se llamará una vez por cada fila modificada por la operación. Un disparador también se puede marcar con el operador PARA CADA DECLARACIÓN durante su creación. Este disparador se ejecutará solo una vez para una operación específica.
Crear un disparador
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-nameON table-name[-- Trigger logic];
El nombre del disparador es el nombre del disparador.
ANTES, DESPUÉS y EN VEZ DE son palabras clave que determinan cuándo se invocará el disparador.
El nombre del evento es el nombre del evento que hará que se invoque el disparador. Puede ser INSERTAR, ACTUALIZAR, ELIMINAR, etc.
El nombre de la tabla es el nombre de la tabla en la que se creará el desencadenante.
Si el disparador se va a crear 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-nameON table-name[-- Trigger logic];
Por ejemplo:
Usaremos la tabla de precios que se muestra a continuación:
Precio:
Creemos otra tabla, Price_Audits, donde registraremos los cambios realizados en la tabla de precios:
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$BEGININSERT 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 que incluye la nueva identificación de fila y la hora en que se crea el registro.
Ahora que tenemos la función de activación, deberíamos vincularla a nuestra tabla de precios. Le daremos al disparador el nombre price_trigger. Antes de que se cree un nuevo registro, la función de activación se invocará automáticamente para registrar los cambios. Aquí está el detonante:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc();
Insertemos un nuevo registro en la tabla de precios:
INSERT INTO PriceVALUES (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:
El gatillo funcionó con éxito.
Listado de activadores
Todos los disparadores que crea en PostgreSQL se almacenan en la tabla pg_trigger. Para ver la lista de disparadores que tiene en la 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:
La columna tgname de la tabla pg_trigger denota el nombre del disparador.
Dejar caer los desencadenantes
Para eliminar un disparador de PostgreSQL, usamos la instrucción DROP TRIGGER con la siguiente sintaxis:
DROP TRIGGER [IF EXISTS] trigger-nameON table-name [ CASCADE | RESTRICT ];
El parámetro de nombre de disparador denota el nombre del disparador que se va a eliminar.
El nombre de la tabla denota el nombre de la tabla de la que se eliminará el desencadenante.
La cláusula IF EXISTS intenta eliminar un desencadenante que existe. Si intenta eliminar un activador que no existe sin utilizar la cláusula IF EXISTS, obtendrá un error.
La opción CASCADA te ayudará a soltar todos los objetos que dependen del disparador automáticamente.
Si usa la opción RESTRICT, el desencadenador 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 soltar el disparador llamado example_trigger en la tabla Compañía, ejecute el siguiente comando:
DROP TRIGGER example_trigger IF EXISTSON Company;
Usando pgAdmin
Ahora veamos cómo se realizaron las tres acciones usando pgAdmin.
Crear disparadores
Para lograr lo mismo a través de pgAdmin, haga esto:
Paso 1) Inicie sesión en su cuenta pgAdmin.
Paso 2)
- Desde la barra de navegación de la izquierda, haga clic en Bases de datos.
- Haga clic en Demo.
Paso 3) Para crear la tabla Price_Audits, escriba el editor de consultas:
CREATE TABLE Price_Audits (book_id INT NOT NULL,entry_date text NOT NULL)
Paso 4) Haga clic en el botón Ejecutar.
Paso 5) Ejecute el siguiente código para definir la función auditfunc:
CREATE OR REPLACE FUNCTION auditfunc() RETURNS TRIGGER AS $my_table$BEGININSERT INTO Price_Audits(book_id, entry_date) VALUES (new.ID, current_timestamp);RETURN NEW;END;$my_table$ LANGUAGE plpgsql
Paso 6) Ejecute el siguiente código para crear el disparador price_trigger:
CREATE TRIGGER price_trigger AFTER INSERT ON PriceFOR EACH ROW EXECUTE PROCEDURE auditfunc()
Paso 7)
- Ejecute el siguiente comando para insertar un nuevo registro en la tabla de precios:
INSERT INTO PriceVALUES (3, 400)
- 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:
Paso 8) Comprobemos el contenido de la tabla Price_Audits:
Listado de activadores
Paso 1) Ejecute el siguiente comando para verificar los desencadenantes en su base de datos:
SELECT tgname FROM pg_trigger
Esto devuelve lo siguiente:
Soltar disparadores
Para soltar el disparador llamado example_trigger en la tabla Compañía, ejecute el siguiente comando:
DROP TRIGGER example_trigger IF EXISTSON Company
Resumen:
- Un desencadenador de PostgreSQL se refiere a una función que se desencadena 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 base de datos incluyen INSERT, UPDATE, DELETE, etc.
- Un desencadenante solo existe durante la vida útil del objeto de base de datos para el que se creó.
- Si se elimina el objeto de la base de datos, también se eliminará el desencadenante.
- Los desencadenadores de PostgreSQL se crean mediante la instrucción CREATE TRIGGER.
- Cada disparador está asociado con una función que indica lo que hará el disparador cuando se invoca.
Descargue la base de datos utilizada en este tutorial