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:
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:
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:
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
- Desde la barra de navegación de la izquierda, haga clic en Bases de datos.
- Haga clic en Demostración.
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
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
- Ejecute el siguiente comando para insertar un nuevo registro en la tabla de precios:
INSERT INTO Price VALUES (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) 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:
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