CREATE EVENT TRIGGER
CREATE EVENT TRIGGER — создать событийный триггер
Синтаксис
CREATE EVENT TRIGGERимя
ONсобытие
[ WHENпеременная_фильтра
IN (значение_фильтра
[, ... ]) [ AND ... ] ] EXECUTE { FUNCTION | PROCEDURE }имя_функции
()
Описание
CREATE EVENT TRIGGER
создаёт новый событийный триггер. Функция триггера выполняется, когда происходит указанное событие и удовлетворяется связанное с триггером условие WHEN
(если такое имеется). За вводной информацией по триггерам обратитесь к Главе 39. Владельцем триггера становится пользователь его создавший.
Параметры
имя
Имя, назначаемое новому триггеру. Это имя должно быть уникальным в базе данных.
событие
Имя события, при котором срабатывает триггер и вызывается заданная функция. Подробнее об именах событий можно узнать в Разделе 39.1.
переменная_фильтра
Имя переменной, применяемой для фильтрования событий. Это указание позволяет ограничить срабатывание триггера подмножеством случаев, в которых он поддерживается. В настоящее время единственно возможное значение параметра
переменная_фильтра
—TAG
.значение_фильтра
Список значений связанного параметра
переменная_фильтра
, для которых должен срабатывать триггер. Для переменнойTAG
это список меток команд (например,'DROP FUNCTION'
).имя_функции
Заданная пользователем функция, объявленная как функция без аргументов и возвращающая тип
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();
Совместимость #
Оператор CREATE EVENT TRIGGER
отсутствует в стандарте SQL.