CREATE EVENT TRIGGER
Name
CREATE EVENT TRIGGER -- 定义一个事件触发器
Synopsis
CREATE EVENT TRIGGER _name_
ON _event_
[ WHEN _filter_variable_ IN (filter_value [, ... ]) [ AND ... ] ]
EXECUTE PROCEDURE _function_name_()
描述
CREATE EVENT TRIGGER
创建一个新的事件触发器.无论何时指定的事件发生或WHEN
的条件满足触发器,触发器函数将被执行.对于事件触发器的一般说明,请见于Chapter 37. 创建事件触发器的用户将变为它的拥有者.
参数
_name_
一个新的触发器的名字.这个名字必须在数据库内是唯一的.
_event_
触发调用一个给定函数的事件名子.关于事件名字的更多信息见于 Section 37.1.
_filter_variable_
过滤事件的变量名称.这将限制它所支持的事件的一个子集去触发该触发器.现在仅支持_filter_variable_
值为TAG.
_filter_value_
可以触发该触发器的 _filter_variable_
相关的值.对于TAG
,这意味着一个tags的命令列表.(例如.'DROP FUNCTION'
).
_function_name_
一个用户声明的不带参数的函数并且返回 event_trigger
类型.
Notes
只有超户能创建事件触发器.
在单用户模式下事件触发器是被关闭的(详见于postgres). 如果一个错误的事件触发器关闭了数据库,在单用户模式下你将不能重启数据库,删除事件触发器.
Examples
禁止执行任何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 PROCEDURE abort_any_command();
Compatibility
在标准的SQL语法中没有 CREATE EVENT TRIGGER
语句.