CREATE EVENT TRIGGER
Синтаксис
CREATE EVENT TRIGGER имя ON событие [ WHEN переменная_фильтра IN (filter_value [, ... ]) [ AND ... ] ] EXECUTE PROCEDURE имя_функции()
Описание
CREATE EVENT TRIGGER создаёт новый событийный триггер. Функция триггера выполняется, когда происходит указанное событие и удовлетворяется связанное с триггером условие WHEN (если такое имеется). За вводной информацией по триггерам обратитесь к Главе 37. Владельцем триггера становится пользователь его создавший.
Параметры
- имя
Имя, назначаемое новому триггеру. Это имя должно быть уникальным в базе данных.
- событие
Имя события, при котором срабатывает триггер и вызывается заданная функция. Подробнее об именах событий можно узнать в Разделе 37.1.
- переменная_фильтра
Имя переменной, применяемой для фильтрования событий. Это указание позволяет ограничить срабатывание триггера подмножеством случаев, в которых он поддерживается. В настоящее время единственно возможное значение параметра переменная_фильтра — TAG.
- значение_фильтра
Список значений связанного параметра переменная_фильтра, для которых должен срабатывать триггер. Для переменной TAG это список меток команд (например, 'DROP FUNCTION').
- имя_функции
Заданная пользователем функция, объявленная как функция без аргументов и возвращающая тип event_trigger.
Замечания
Создавать событийные триггеры могут только суперпользователи.
Событийные триггеры не вызываются в однопользовательском режиме (см. postgres ). Если ошибочный событийный триггер заблокировал работу с базой данных так, что даже удалить его нельзя, перезапустите сервер в однопользовательском режиме и это можно будет сделать.
Примеры
Триггер, запрещающий выполнение любой команды DDL:
CREATE OR REPLACE FUNCTION abort_any_command() RETURNS event_trigger LANGUAGE plpgsql AS $$ BEGIN RAISE EXCEPTION 'команда % отключена', tg_tag; END; $$; CREATE EVENT TRIGGER abort_ddl ON ddl_command_start EXECUTE PROCEDURE abort_any_command();
Пред. | Начало | След. |
CREATE DOMAIN | Уровень выше | CREATE EXTENSION |