历史版本。 PostgreSQL 9.4 已结束支持。 2020-02-13. 请参阅 当前版本手册.
CREATE EVENT TRIGGER
CREATE EVENT TRIGGER — 定义一个新的事件触发器
大纲
CREATE EVENT TRIGGERnameONevent[ WHENfilter_variableIN (filter_value [, ... ]) [ AND ... ] ] EXECUTE PROCEDUREfunction_name()
描述
CREATE EVENT TRIGGER创建一个新的事件触发器。每当指定的事件发生,并且与该触发器关联的WHEN条件(如果有)得到满足时,就会执行该触发器函数。有关事件触发器的一般性介绍,见第 37 章。创建事件触发器的用户将成为其所有者。
参数
name要赋予新触发器的名称。该名称在数据库内必须唯一。
event触发对给定函数调用的事件名称。有关事件名称的更多信息,见第 37.1 节。
filter_variable用于过滤事件的变量名称。这样可以将触发器限定为只在原本支持的部分情形下触发。当前唯一支持的
filter_variable是TAG。filter_value与相关
filter_variable关联的一组值;当其取值属于该列表时,触发器就会被触发。对于TAG,这表示一组命令标签(例如'DROP FUNCTION')。function_name由用户提供的函数,声明为不接受参数并返回类型
event_trigger。
注解
只有超级用户能创建事件触发器。
事件触发器在单用户模式下被禁用(参见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 PROCEDURE abort_any_command();
兼容性
在 SQL 标准中没有
CREATE EVENT TRIGGER语句。