CREATE EVENT TRIGGER

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


Синтаксис

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