CREATE EVENT TRIGGER
CREATE EVENT TRIGGER — определить новый триггер события
Синтаксис
CREATE EVENT TRIGGER имя
ON событие
[ WHEN переменная_фильтра IN (значение_фильтра [, ... ]) [ 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
.