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