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
, связанное с триггером, удовлетворяется, будет выполнена триггерная функция.
Для общего введения в триггеры событий см. Глава 37.
Пользователь, создающий триггер события, становится его владельцем.
Параметры
name
Имя, которое нужно присвоить новому триггеру. Это имя должно быть уникальным в пределах базы данных.
event
Имя события, которое вызывает вызов указанной функции. См. Раздел 37.1 для получения дополнительной информации о именах событий.
filter_variable
Имя переменной, используемой для фильтрации событий. Это позволяет ограничить срабатывание триггера только для подмножества случаев, в которых он поддерживается. В настоящее время единственная поддерживаемая
filter_variable
- этоTAG
.filter_value
Список значений для связанной переменной фильтра
filter_variable
, для которой должен срабатывать триггер. ДляTAG
это означает список тегов команд (например,'DROP FUNCTION'
).function_name
Пользовательская функция, которая объявляется как не принимающая аргументов и возвращающая тип
event_trigger
.В синтаксисе
CREATE EVENT TRIGGER
ключевые словаFUNCTION
иPROCEDURE
эквивалентны, но ссылочная функция должна быть в любом случае функцией, а не процедурой. Использование ключевого словаPROCEDURE
здесь является историческим и устаревшим.
Примечания
Только суперпользователи могут создавать триггеры событий.
Триггеры событий отключены в однопользовательском режиме (см. postgres). Если ошибочный триггер событий отключает базу данных настолько сильно, что вы даже не можете удалить триггер, перезапустите в однопользовательском режиме, и вы сможете это сделать.
Примеры
Запретить выполнение любой команды 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
.