CREATE EVENT TRIGGER — 定义新的事件触发器
CREATE EVENT TRIGGERnameONevent[ WHENfilter_variableIN (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语句。
如果您在文档中发现任何不正确、与您使用特定功能的经验不符或需要进一步澄清的地方,请使用此表格报告文档问题。