创建事件触发

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_variable *是TAG
  • 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语句。

See Also

更改事件触发, 下降事件触发, CREATE FUNCTION