CREATE EVENT TRIGGER

CREATE EVENT TRIGGER — определить новый событийный триггер

Синтаксис

CREATE EVENT TRIGGER имя
    ON событие
    [ WHEN переменная_фильтра IN (filter_value [, ... ]) [ 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.

См. также

ALTER EVENT TRIGGER, DROP EVENT TRIGGER, CREATE FUNCTION