35

Creación de Triggers PostegreSQL

Tambien conocidos como disparadores. Son ejecutados o “disparados” cuando hacemos una consulta (INSERT, UPDATE o DELETE). Intervienen 4 elementos principalmente:

  1. Una Tabla
  2. Una consulta sobre una tabla
  3. Una funcion PL
  4. El propio trigger

¿Cómo funcionan?

Supongamos que tenemos una tabla llamada ‘pasajero’ donde normalmente se registra el nombre y la dirección de cualquier persona que haga uso del sistema.

Y queremos que cada vez que hacemos un nuevo registro en la tabla ‘pasajero’, se ejecute tambien un registro automatico en otra tabla donde se guarde la fecha y hora del nuevo registro así como tambien el número total de registros acumulados en ese momento.

Para ello vamos a crear dos tablas:

  • pasajeros
  • contador_pasajeros
-- Tabla PasajerosCREATETABLEpublic.pasajeros
(
    idserial,
    nombre charactervarying,
    direccion charactervarying,
    CONSTRAINT pasajeros_pkey PRIMARY KEY (id)
)
WITH (
    OIDS = FALSE
);

ALTERTABLEpublic.pasajeros
    OWNER to postgres;

-- Tabla Contador de pasajerosCREATETABLEpublic.contador_pasajeros
(
    idserial,
    fecha_registro timewithtime zone,
    contador_registro integer,
    CONSTRAINT contador_pasajeros_pkey PRIMARY KEY (id)
)
WITH (
    OIDS = FALSE
);

ALTERTABLEpublic.contador_pasajeros
    OWNER to postgres;

Ahora vamos a crear la funcion PL, que se encarga de hacer el registro en la tabla ‘contador_pasajeros’

CREATEFUNCTIONpublic.registrador()
	RETURNSTRIGGERLANGUAGE'plpgsql'AS $BODY$
DECLARE
 contador integer = 0;
 i record;
BEGINFOR i INSELECT * FROM pasajeros LOOP
	 contador := contador + 1;
	ENDLOOP;
	INSERTINTO contador_pasajeros(fecha_registro, contador_registro)
	-- now() devuelve la fecha y hora actualVALUES (now(), contador);
	RETURN NEW;
END
$BODY$

Solo nos falta crear el trigger, que conecta la función PL ‘registrador’ con la tabla ‘pasajero’

CREATE TRIGGER trigger_registrador
AFTER INSERT
ON pasajeros
FOREACH ROW
EXECUTE PROCEDUREregistrador();

Listo, entonces solo nos queda hacer pruebas. Para ello verificamos que incialmente las tablas ‘pasajeros’ y ‘contador_pasajeros’ están vacias:

-- Ejecutamos las consultas una a la vezSELECT * FROM pasajeros;

SELECT * FROM contador_pasajeros;

-- Una vez verificamos que están vacias, vamos a insertar datos-- en la tabla pasajerosINSERTINTO pasajeros(nombre, direccion)
VALUES ('Juanito Alimaña', 'Cali, Colombia');

-- Ejecutamos nuevamente las consultas en las tablas y podemos-- verificar que todo funciona correctamente
Escribe tu comentario
+ 2
Ordenar por:
7
13890Puntos

Muchas gracias por tu aporte, por fin aclare lo que en clase fue muy confuso.

1
25904Puntos
hOLA  @JOSEMELNET,  MUY BUENO VUESTRO GTUTORIAL, MUCHAS GRACIAS POR HACERLO Y COMPARTIRLO CON LA CLASE,  YO REALMENTE QUE SI L'APRECIO DE VOS. 
1
2776Puntos

Años despues y me salvo la vida ❤️

1
8185Puntos

Muchas gracias por el aporte.

1
4602Puntos

Muy bien explicado!!!

1

Excelente aporte, sinceramente estaba muy confundido con el temas de los Triggers. Ahora quede claro en esto.

1
8509Puntos

Gracias! me sirvió como buen repaso.

1
8065Puntos

Lo entendí mejor, muchas gracias!

1
14885Puntos

Gracias por el tutorial :3

0
5623Puntos

Eres genial, demasiado bien explicado y resumido!

0
70130Puntos

Bastante concreto, muchas gracias.