CREATE EVENT TRIGGER

CREATE EVENT TRIGGER用于创建一个新的事件触发器。

简介

CREATE EVENT TRIGGER创建一个新的事件触发器。 只要指定的事件发生并且与该触发器相关的WHEN条件(如果有)被满足,该触发器的函数将被执行。创建事件触发器的用户会成为它的拥有者。

语法

    CREATE EVENT TRIGGER name
        ON event
        [ WHEN filter_variable IN (filter_value [, ... ]) [ AND ... ] ]
        EXECUTE { FUNCTION | PROCEDURE } function_name()

参数

  • name给新触发器的名称。在该数据库中这个名称必须唯一。

  • event会触发对给定函数调用的事件名称。

  • filter_variable用来过滤事件的变量名称。这可以用来限制触发器只为它支持的那一部分情况引发。当前唯一支持的 filter_variableTAG

  • filter_value与该触发器要为其引发的 filter_variable相关联的一个值列表。对于TAG,这表示一个命令标签列表(例如 'DROP FUNCTION')。

  • function_name一个用户提供的函数,它被声明为没有参数并且返回类型 event_trigger

  • CREATE EVENT TRIGGER的语法中,关键字CREATE EVENT TRIGGERPROCEDURE是等效的,但是被引用的函数在任何情况下都必须是函数,而不是过程。 此处关键字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();