问题报告
纠错本页面
CREATE EVENT TRIGGER
名称
CREATE EVENT TRIGGER -- 定义一个新的事件触发器大纲
CREATE EVENT TRIGGER name ON event [ WHEN filter_variable IN (filter_value [, ... ]) [ AND ... ] ] EXECUTE 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。
注解
只有超级用户能创建事件触发器。
在单用户模式(见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语句。