CREATE EVENT TRIGGER — 定义新的事件触发器
CREATE EVENT TRIGGERname
ONevent
[ WHENfilter_variable
IN (filter_value
[, ... ]) [ AND ... ] ] EXECUTE { FUNCTION | PROCEDURE }function_name
()
CREATE EVENT TRIGGER
创建一个新的事件触发器。当指定事件发生且触发器关联的 WHEN
条件(如果有)满足时,将执行触发器函数。有关事件触发器的总体介绍,请参见 第 38 章。创建事件触发器的用户将成为其所有者。
name
要赋予新触发器的名称。此名称在数据库中必须唯一。
event
触发对给定函数调用的事件的名称。有关事件名称的更多信息,请参见 第 38.1 节。
filter_variable
用于过滤事件的变量的名称。这使得可以将触发器的触发限制在它支持的事件子集中。目前唯一支持的 filter_variable
是 TAG
。
filter_value
与关联的 filter_variable
相关联的值列表,触发器应为此值列表触发。对于 TAG
,这意味着命令标签列表(例如 'DROP FUNCTION'
)。
function_name
用户提供的函数,声明为不接受任何参数并返回 event_trigger
类型。
在 CREATE EVENT TRIGGER
的语法中,关键字 FUNCTION
和 PROCEDURE
等效,但引用的函数在任何情况下都必须是函数,而不是过程。这里使用关键字 PROCEDURE
是历史遗留的,已弃用。
只有超级用户才能创建事件触发器。
在单用户模式下禁用事件触发器(参见 postgres),以及当 event_triggers 设置为 false
时也是如此。如果错误的事件触发器禁用了数据库,以至于您甚至无法删除触发器,请在 event_triggers 设置为 false
或在单用户模式下重新启动,以便临时禁用事件触发器,然后您就可以做到这一点。
禁止执行任何 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
语句。
如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符或需要进一步说明,请使用 此表格 报告文档问题。