2024 年 9 月 26 日: PostgreSQL 17 发布!
支持版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3

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 章。创建事件触发器的用户将成为其所有者。

参数

name

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

event

触发对给定函数调用的事件的名称。有关事件名称的更多信息,请参见 第 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_triggers 设置为 false 或在单用户模式下重新启动,以便临时禁用事件触发器,然后您就可以做到这一点。

示例

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

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符或需要进一步说明,请使用 此表格 报告文档问题。