CREATE EVENT TRIGGER#
CREATE EVENT TRIGGER
CREATE EVENT TRIGGER — определить новый триггер событий
Синтаксис
CREATE EVENT TRIGGERname
ONevent
[ WHENfilter_variable
IN (filter_value
[, ... ]) [ AND ... ] ] EXECUTE { FUNCTION | PROCEDURE }function_name
()
Описание
Создание нового триггера события выполняется с помощью команды CREATE EVENT TRIGGER
.
Когда происходит указанное событие и если условие WHEN
, связанное с триггером, удовлетворяется, будет выполнена триггерная функция.
Для общего введения в триггеры событий см. Глава 36.
Пользователь, создающий триггер события, становится его владельцем.
Параметры
name
Имя, которое нужно присвоить новому триггеру. Это имя должно быть уникальным в пределах базы данных.
event
Имя события, которое вызывает вызов указанной функции. См. Раздел 36.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
.