Перейти к основному содержимому

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.

Смотрите также

ALTER EVENT TRIGGER, DROP EVENT TRIGGER, CREATE FUNCTION