CREATE EVENT TRIGGER#

CREATE EVENT TRIGGER

CREATE EVENT TRIGGER

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, связанное с триггером, удовлетворяется, будет выполнена триггерная функция. Для общего введения в триггеры событий см. Глава 37. Пользователь, создающий триггер события, становится его владельцем.

Параметры

name

Имя, которое нужно присвоить новому триггеру. Это имя должно быть уникальным в пределах базы данных.

event

Имя события, которое вызывает вызов указанной функции. См. Раздел 37.1 для получения дополнительной информации о именах событий.

filter_variable

Имя переменной, используемой для фильтрации событий. Это позволяет ограничить срабатывание триггера только для подмножества случаев, в которых он поддерживается. В настоящее время единственная поддерживаемая filter_variable - это TAG.

filter_value

Список значений для связанной переменной фильтра filter_variable, для которой должен срабатывать триггер. Для 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.