Disparadores (Triggers)
• Un disparador (trigger en inglés) es un objeto de una base de datos
que define una acción que se ejecutará de manera automática. Este
disparador se relaciona con una de las tablas y se ejecuta al realizarse
una modificación sobre la misma, normalmente con las sentencias
INSERT, UPDATE o DELETE.
Programar la función
• CREATE FUNCTION funcion_programada()
• RETURNS trigger AS
• $BODY$
• BEGIN
• -- En esta línea se escribe la operación que se desea automatizar
• RETURN NEW;
• END;
• $BODY$
• LANGUAGE plpgsql;
• Un disparador se puede definir de las siguientes maneras:
• Para que ocurra ANTES de cualquier INSERT,UPDATE ó DELETE
• Para que ocurra DESPUES de cualquier INSERT,UPDATE ó DELETE
• Para que se ejecute una sola vez por comando SQL (statement-level
trigger)
• Para que se ejecute por cada linea afectada por un comando SQL
(row-level trigger)
Disparador en la tabla
• CREATE TRIGGER nombre_trigger
• {BEFORE | AFTER | INSTEAD OF} {event [OR …]}
• ON tabla
• [FOR [EACH] {ROW | STATEMENT}]
• EXECUTE PROCEDURE función_programada;
• Cuando una función escrita en PL/pgSQL es llamada por un
disparador tenemos ciertas variable especiales disponibles en dicha
función. Estas variables son las siguientes:
• NEW
• Tipo de dato RECORD; Variable que contiene la nueva fila de la tabla
para las operaciones INSERT/UPDATE en disparadores del tipo row-
level. Esta variable es NULL en disparadores del tipo statement-level.
• OLD
• Tipo de dato RECORD; Variable que contiene la antigua fila de la tabla
para las operaciones UPDATE/DELETE en disparadores del tipo row-
level. Esta variable es NULL en disparadores del tipo statement-level.
• TG_NAME
• Tipo de dato name; variable que contiene el nombre del disparador que está
usando la función actualmente.
• TG_WHEN
• Tipo de dato text; una cadena de texto con el valor BEFORE o AFTER dependiendo
de como el disparador que está usando la función actualmente ha sido definido
• TG_LEVEL
• Tipo de dato text; una cadena de texto con el valor ROW o STATEMENT
dependiendo de como el disparador que está usando la función actualmente ha
sido definido
• TG_OP
• Tipo de dato text; una cadena de texto con el valor INSERT, UPDATE o DELETE
dependiendo de la operación que ha activado el disparador que está usando la
función actualmente.
• TG_RELID
• Tipo de dato oid; el identificador de objeto de la tabla que ha activado el
disparador que está usando la función actualmente.
• TG_RELNAME
• Tipo de dato name; el nombre de la tabla que ha activado el disparador que está
usando la función actualmente. Esta variable es obsoleta y puede desaparacer en
el futuro. Usar TG_TABLE_NAME.
• TG_TABLE_NAME
• Tipo de dato name; el nombre de la tabla que ha activado el
disparador que está usando la función actualmente.
• TG_TABLE_SCHEMA
• Tipo de dato name; el nombre de la schema de la tabla que ha
activado el disparador que está usando la función actualmente.
• TG_NARGS
• Tipo de dato integer; el número de argumentos dados al
procedimiento en la sentencia CREATE TRIGGER.
• TG_ARGV[]
• Tipo de dato text array; los argumentos de la sentencia CREATE
TRIGGER. El índice empieza a contar desde 0. Indices inválidos
(menores que 0 ó mayores/iguales que tg_nargs) resultan en valores
nulos.