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