PostgreSQL CREATE EVENT TRIGGER
CREATE EVENT TRIGGER — 定义一个新的事件触发器
大纲
CREATE EVENT TRIGGER name ON
event [ WHEN
filter_variable
IN (filter_value [, ... ]) [ AND ... ] ]
EXECUTE { FUNCTION | PROCEDURE } function_name()
描述
CREATE EVENT TRIGGER
创建一个新的事件触发器。 只要指定的事件发生并且与该触发器相关的WHEN
条件(如果有)被 满足,该触发器的函数将被执行。关于事件触发器的一般性介绍可见 第 39 章。创建事件触发器的用户会成为它的拥有者。
参数
name
-
给新触发器的名称。在该数据库中这个名称必须唯一。
event
-
会触发对给定函数调用的事件名称。更多事件名称的信息请见 第 39.1 节。
filter_variable
-
用来过滤事件的变量名称。这可以用来限制触发器只为它支持的那一部分 情况引发。当前唯一支持的
filter_variable
是TAG
。 filter_value
-
与该触发器要为其引发的
filter_variable
相关联 的一个值列表。对于TAG
,这表示一个命令标签列表(例如'DROP FUNCTION'
)。 function_name
-
一个用户提供的函数,它被声明为没有参数并且返回类型
event_trigger
。在
CREATE EVENT TRIGGER
的语法中,关键字CREATE EVENT TRIGGER
和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
语句。