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