Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

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 条件(如有)得到满足,触发器函数就会被执行。有关事件触发器的总体介绍,请参阅第 38 章。创建事件触发器的用户将成为该触发器的所有者。

参数

名称

分配给新触发器的名称。此名称在数据库中必须是唯一的。

事件

触发被指定函数调用的事件的名称。有关事件名称的更多信息,请参阅第 38.1 节

filter_variable

用于过滤事件的变量名称。这让用户可以将触发器的触发限制在一部分受支持的情况下。当前,唯一受支持的 filter_variableTAG

filter_value

触发器触发的关联 filter_variable 的值列表。对于 TAG,这意味着命令标签列表(例如,'DROP FUNCTION')。

function_name

用户提供的函数,声明为不带参数且返回类型 event_trigger

CREATE EVENT TRIGGER 的语法中,关键字 FUNCTIONPROCEDURE 是等效的,但在任何情况下引用的函数都必须是函数,而不是过程。此处的关键字 PROCEDURE 的使用具有历史意义且已弃用。

注释

只有超级用户才能创建事件触发器。

事件触发器在单用户模式下(见 postgres)以及 event_triggers 设置为 false 时禁用。如果错误的事件触发器使数据库禁用,以至于您甚至无法删除触发器,则重新启动并设置 event_triggersfalse 以临时禁用事件触发器或处于单用户模式,您便能够执行此操作。

示例

禁止执行任何 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 语句。

另请参阅

ALTER EVENT TRIGGERDROP EVENT TRIGGERCREATE FUNCTION