CREATE EVENT TRIGGER — 定义一个新的事件触发器
CREATE EVENT TRIGGERnameONevent[ WHENfilter_variableIN (filter_value[, ... ]) [ AND ... ] ] EXECUTE { FUNCTION | PROCEDURE }function_name()
CREATE EVENT TRIGGER创建一个新的事件触发器。 每当指定的事件发生,并且与该触发器关联的WHEN条件(如果有)得到 满足时,就会执行该触发器函数。有关事件触发器的一般性介绍,见 Chapter 38。创建事件触发器的用户将成为其拥有者。
name #要赋予新触发器的名称。该名称在数据库内必须唯一。
event #触发对给定函数调用的事件名称。有关事件名称的更多信息,见 Section 38.1。
filter_variable #用于过滤事件的变量名称。这使得可以将触发器限定为只在支持该变量的部 分情形下触发。当前唯一支持的 filter_variable 是TAG。
filter_value #与相关filter_variable 关联的一组值;当其取值属于该列表时,触发器就会被触发。对于 TAG,这表示一组命令标签(例如 'DROP FUNCTION')。
function_name #由用户提供的函数,声明为不接受参数并返回类型 event_trigger。
在CREATE EVENT TRIGGER的语法中,关键字 FUNCTION和PROCEDURE是等效的, 但被引用的对象无论如何都必须是函数,而不是过程。这里使用关键字 PROCEDURE属于历史遗留做法,现已弃用。
只有超级用户能创建事件触发器。
禁止执行任何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语句。
如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。