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

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 поддерживается по историческим причинам и считается устаревшим.

Примечания

Создавать триггеры событий разрешено только суперпользователям.

Эти триггеры не работают в однопользовательском режиме (смотрите 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();

Совместимость

В стандарте SQL нет команды CREATE EVENT TRIGGER.

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

ALTER EVENT TRIGGER, DROP EVENT TRIGGER, CREATE FUNCTION