登录
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
条件(如果存在)得到满足时,触发器函数将被执行。有关事件触发器的总体介绍,请参阅第 40 章。创建事件触发器的用户将成为其所有者。
参数
name
赋予新触发器的名称。此名称在数据库中必须是唯一的。
event
触发对给定函数的调用的事件的名称。有关事件名称的更多信息,请参阅第 40.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
语句。