PostgreSQL Activadores: crear, enumerar y eliminar con ejemplo

โšก Resumen inteligente

PostgreSQL Los disparadores son funciones que se ejecutan automรกticamente cuando se produce un evento de INSERCIร“N, ACTUALIZACIร“N o ELIMINACIร“N en una tabla, lo que permite a la base de datos aplicar reglas, registrar cambios y auditar datos sin necesidad de cรณdigo de aplicaciรณn adicional.

  • โšก Definiciรณn: Un disparador es una funciรณn que se invoca automรกticamente ante un evento de la base de datos, como una operaciรณn de inserciรณn, actualizaciรณn o eliminaciรณn.
  • ๐Ÿ” Alcance: FOR EACH ROW ejecuta el disparador una vez por cada fila afectada, mientras que FOR EACH STATEMENT lo ejecuta una vez por cada operaciรณn.
  • ๐Ÿ› ๏ธ Crear: CREATE TRIGGER vincula una funciรณn a una tabla y establece los tiempos BEFORE, AFTER o INSTEAD OF.
  • ๐Ÿ“‹ Lista: Consulta el catรกlogo pg_trigger con SELECT tgname para ver todos los disparadores de la base de datos.
  • ๐Ÿ—‘๏ธ Drop: DROP TRIGGER elimina un disparador, e IF EXISTS evita un error cuando este no existe.
  • ๐Ÿค– Ayuda de IA: Los asistentes de IA generan funciones de activaciรณn y sugieren momentos ANTES o DESPUร‰S de una solicitud en lenguaje sencillo.

PostgreSQL disparadores

ยฟQuรฉ es el gatillo? PostgreSQL?

A PostgreSQL Desencadenar Es una funciรณn que se activa automรกticamente cuando ocurre un evento en la base de datos, por ejemplo, en una tabla. Algunos ejemplos de eventos que pueden activar un disparador son INSERTAR, ACTUALIZAR, ELIMINAR, etc. Ademรกs, al crear un disparador para una tabla, este se desactivarรก automรกticamente cuando se elimine dicha 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 ejecutarรก 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 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 disparador:

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 deberรญa insertarse un registro en la tabla Price_Audits debido al disparador que creamos. Vamos a comprobarlo:

SELECT * FROM Price_Audits;

Esto devolverรก lo siguiente:

PostgreSQL crear activador

El disparador funcionรณ con รฉxito.

PostgreSQL Disparador de lista

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 de CRISPR Medicine News, consulte la tabla ejecutando el comando SELECT como se muestra a continuaciรณn:

SELECT tgname FROM pg_trigger;

Esto devuelve lo siguiente:

PostgreSQL Disparador de lista

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

PostgreSQL Disparador de caรญda

Cuando ya no se necesita un disparador, puede eliminarlo con la misma facilidad. Para soltar 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 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 realizan las tres acciones usando pgAdmin.

Cรณmo crear un disparador en PostgreSQL usando pgAdmin

Aquรญ te mostramos cรณmo puedes crear un disparador en PostgreSQL usando pgAdmin:

Paso 1) Inicie sesiรณn en su cuenta pgAdmin

Abra pgAdmin e inicie sesiรณn en su cuenta con sus credenciales.

Paso 2) Cree una base de datos de demostraciรณn

  1. En 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 Code para funciรณn de auditorรญa

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 Code 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)
  1. 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

Vamos a comprobar 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

Necesarioping Activadores mediante pgAdmin

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

DROP TRIGGER example_trigger IF EXISTS
ON Company

Descargue la Base de Datos utilizada en este Tutorial

Preguntas Frecuentes

Un disparador BEFORE se ejecuta antes de que se guarde el cambio en la fila, por lo que puede modificarla o rechazarla. Un disparador AFTER se ejecuta despuรฉs de que se guarda el cambio, lo que resulta adecuado para tareas de registro y auditorรญa.

Un disparador INSTEAD OF se define en una vista, no en una tabla. Reemplaza las operaciones INSERT, UPDATE o DELETE con lรณgica personalizada, lo que permite modificar una vista de solo lectura.

Las funciones de activaciรณn suelen escribirse en PL/pgSQL. PostgreSQL Tambiรฉn admite PL/PythonPL/Perl, PL/Tcl y C, para que puedas elegir el lenguaje que mejor se adapte a tu lรณgica.

Utilice ALTER TABLE table-name DISABLE TRIGGER trigger-name para desactivarlo y ENABLE TRIGGER para volver a activarlo. Esto evita la caรญda.ping y recreando el disparador durante las cargas masivas.

Sรญ. Cada disparador aรฑade trabajo a cada fila o instrucciรณn afectada, por lo que una lรณgica compleja puede ralentizar las escrituras. Mantenga las funciones de los disparadores cortas e indexe las columnas que consultan.

Sรญ. Si un disparador modifica otra tabla que tambiรฉn tiene disparadores, estos tambiรฉn se activan, creando disparadores en cascada. PostgreSQL Limita la profundidad de anidamiento para evitar bucles infinitos.

Los asistentes de codificaciรณn de IA convierten una solicitud en lenguaje sencillo en una instrucciรณn CREATE TRIGGER completa y una funciรณn de activaciรณn, sugieren la sincronizaciรณn BORE o AFTER y explican el cรณdigo PL/pgSQL generado para una revisiรณn rรกpida.

Sรญ. Herramientas como pgai y los asistentes basados โ€‹โ€‹en GPT traducen una regla descrita a SQL de activaciรณn y pueden crear activadores INSERT que etiquetan o validan automรกticamente los nuevos datos a medida que llegan.

Resumir este post con: