Postgresql 中文操作指南

CREATE EVENT TRIGGER

CREATE EVENT TRIGGER — 定义新的事件触发器

Synopsis

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

Description

CREATE EVENT TRIGGER 创建新的事件触发器。每当指定事件发生且触发器关联的 WHEN 条件(如果有)得到满足时,将执行触发器函数。有关事件触发器的常规介绍,请参见 Chapter 40 。创建事件触发器用户将成为该触发器的所有者。

Parameters

  • name

    • 赋予新触发器的名称。此名称在数据库内必须唯一。

  • event

    • 触发调用给定函数的事件名称。有关事件名称的详细信息,请参见 Section 40.1

  • filter_variable

    • 用于过滤事件的变量名称。这使得能够将触发器的触发限制为在其中受支持用例的子集中。目前,受支持的唯一 filter_variableTAG

  • filter_value

    • 触发器应触发的关联 filter_variable 的值列表。对于 TAG ,此值列表为命令标签的列表(例如, 'DROP FUNCTION' )。

  • function_name

    • 用户提供的函数。此函数被声明为不接受任何参数,并返回 event_trigger 类型。

    • CREATE EVENT TRIGGER 语法中,关键字 FUNCTIONPROCEDURE 是等效的,但在任何情况下,引用的函数都必须是函数,而不是过程。此处使用关键字 PROCEDURE 已过时并不再推荐。

Notes

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

在单用户模式下,事件触发器处于禁用状态(请参见 postgres )。如果错误的事件触发器导致数据库禁用,以至于您甚至无法删除该触发器,请在单用户模式下重新启动,您将能够进行该操作。

Examples

禁止执行任何 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();

Compatibility

SQL 标准中没有 CREATE EVENT TRIGGER 语句。