CREATE EVENT TRIGGER — создание нового триггера события
CREATE EVENT TRIGGERnameONevent[ WHENfilter_variableIN (filter_value[, ... ]) [ AND ... ] ] EXECUTE { FUNCTION | PROCEDURE }function_name()
Команда CREATE EVENT TRIGGER создаёт новый триггер события. Всякий раз, когда происходит указанное событие и условие WHEN, связанное с триггером (если оно есть), удовлетворяется, будет выполнена функция триггера. Общее введение в триггеры событий см. в разделе Глава 5.3. Пользователь, создающий триггер события, становится его владельцем.
nameИмя, присваиваемое новому триггеру. Это имя должно быть уникальным в пределах базы данных.
eventИмя события, которое вызывает вызов заданной функции. Подробнее об именах событий см. в разделе Раздел 5.3.1.
filter_variable
Имя переменной, используемой для фильтрации событий. Это позволяет ограничить срабатывание триггера подмножеством случаев, в которых он поддерживается. В настоящее время единственная поддерживаемая filter_variable — это TAG.
filter_value
Список значений для связанной переменной filter_variable, при которых триггер должен срабатывать. Для TAG это означает список тегов команд (например, 'DROP FUNCTION').
function_name
Предоставляемая пользователем функция, объявленная как не принимающая аргументов и возвращающая тип event_trigger.
В синтаксисе CREATE EVENT TRIGGER ключевые слова FUNCTION и PROCEDURE эквивалентны, но ссылаться в любом случае должна на функцию, а не на процедуру. Использование ключевого слова PROCEDURE здесь является историческим и устаревшим.
Только суперпользователи могут создавать триггеры событий.
Триггеры событий отключены в однопользовательском режиме (см. postgres), а также когда параметр event_triggers установлен в false. Если ошибочный триггер события настолько нарушит работу базы данных, что вы даже не сможете удалить его, перезапустите с параметром event_triggers, установленным в false, чтобы временно отключить триггеры событий, или в однопользовательском режиме, и тогда вы сможете это сделать.
Запретить выполнение любой команды DDL:
CREATE OR REPLACE FUNCTION abort_any_command() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN RAISE EXCEPTION 'command % is disabled', tg_tag; END; $$; CREATE EVENT TRIGGER abort_ddl ON ddl_command_start EXECUTE FUNCTION abort_any_command();
В стандарте SQL нет оператора CREATE EVENT TRIGGER.