CREATE EVENT TRIGGER — definir un nuevo disparador de eventos (event trigger)
CREATE EVENT TRIGGERnameONevent[ WHENfilter_variableIN (filter_value[, ... ]) [ AND ... ] ] EXECUTE { FUNCTION | PROCEDURE }function_name()
CREATE EVENT TRIGGER crea un nuevo disparador de eventos.
Cada vez que ocurre el evento designado y se cumple la condición WHEN
asociada al disparador, si la hay, se ejecutará la función del disparador. Para una
introducción general a los disparadores de eventos, consulta la Chapter 38.
El usuario que crea un disparador de eventos se convierte en su propietario.
nameEl nombre que se le dará al nuevo disparador. Este nombre debe ser único dentro de la base de datos.
eventEl nombre del evento que dispara la llamada a la función dada. Consulta la Section 38.1 para obtener más información sobre los nombres de los eventos.
filter_variable
El nombre de una variable utilizada para filtrar eventos. Esto hace posible restringir
el disparo del disparador a un subconjunto de los casos en los que es compatible.
Actualmente, la única variable de filtro (filter_variable)
admitida es TAG.
filter_value
Una lista de valores para la variable de filtro (filter_variable)
asociada para los cuales debe dispararse el disparador. Para TAG, esto significa una
lista de etiquetas de comando (por ejemplo, 'DROP FUNCTION').
function_name
Una función proporcionada por el usuario que se declara como que no toma ningún argumento y devuelve el
tipo event_trigger.
En la sintaxis de CREATE EVENT TRIGGER, las palabras clave FUNCTION
y PROCEDURE son equivalentes, pero la función referenciada debe ser en cualquier caso
una función, no un procedimiento. El uso de la palabra clave PROCEDURE aquí es histórico
y está obsoleto.
Solo los superusuarios pueden crear disparadores de eventos.
Los disparadores de eventos están desactivados en el modo de usuario único (consulta la postgres), así como cuando event_triggers se establece en
false. Si un disparador de eventos erróneo desactiva la base de datos hasta el punto
de que ni siquiera puedes eliminar el disparador, reinicia con event_triggers
establecido en false para desactivar temporalmente los disparadores de eventos, o
en modo de usuario único, y podrás hacerlo.
Prohibir la ejecución de cualquier comando DDL:
CREATE OR REPLACE FUNCTION abort_any_command() RETURNS event_trigger Leone plpgsql AS $$ BEGIN RAISE EXCEPTION 'el comando % está desactivado', tg_tag; END; $$; CREATE EVENT TRIGGER abort_ddl ON ddl_command_start EXECUTE FUNCTION abort_any_command();
No existe una instrucción CREATE EVENT TRIGGER en el estándar SQL.