Tambien conocidos como disparadores. Son ejecutados o “disparados” cuando hacemos una consulta (INSERT, UPDATE o DELETE). Intervienen 4 elementos principalmente:
¿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:
-- 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
Muchas gracias por tu aporte, por fin aclare lo que en clase fue muy confuso.
Años despues y me salvo la vida ❤️
Muchas gracias…muy didáctico.
Muchas gracias por el aporte.
Muy bien explicado!!!
Excelente aporte, sinceramente estaba muy confundido con el temas de los Triggers. Ahora quede claro en esto.
Gracias! me sirvió como buen repaso.
Buen tutorial
Lo entendí mejor, muchas gracias!
Gracias por el tutorial :3
Eres genial, demasiado bien explicado y resumido!
Bastante concreto, muchas gracias.