2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 12 / 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

与 associated 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 语句。

提交更正

如果您在文档中发现任何不正确、与您实际体验不符或需要进一步澄清的内容,请使用 此表单 来报告文档问题。