选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

文档 / SQL 命令 / 触发器与规则

SQL COMMAND · 触发器与规则

CREATE EVENT TRIGGER

定义一个新的事件触发器

CREATE触发器与规则引入 10(基线)现存至 20 devel1 次语法变更

动词
CREATE
对象
EVENT TRIGGER
引入版本
10(基线)
状态
现存
语法变更次数
1
手册小节数
6

本站手册 · 18官方文档 ↗

版本轨迹

相对 PostgreSQL 17 无变化。

语法铁道图 PostgreSQL 18

沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。

CREATE EVENT TRIGGER name ON event WHEN filter_variable IN ( filter_value , ) AND EXECUTE FUNCTION PROCEDURE function_name ( )

语法概要

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

PostgreSQL 18 手册 · 查看完整参考页

描述

CREATE EVENT TRIGGER创建一个新的事件触发器。 每当指定的事件发生,并且与该触发器关联的WHEN条件(如果有)得到 满足时,就会执行该触发器函数。有关事件触发器的一般性介绍,见 Chapter 38。创建事件触发器的用户将成为其拥有者。

参数

name

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

event

触发对给定函数调用的事件名称。有关事件名称的更多信息,见 Section 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语句。

另见

语法演化

相邻大版本之间的差异,新的在前。版本号链接到对应快照。

  1. PostgreSQL 16← 15正文更新

    正文更新
  2. PostgreSQL 15← 14正文更新

    正文更新
  3. PostgreSQL 14← 13正文更新

    正文更新
  4. PostgreSQL 12← 11正文更新

    正文更新
  5. PostgreSQL 11← 10语法变化

    + EXECUTE { FUNCTION | PROCEDURE } function_name()− EXECUTE PROCEDURE function_name()正文更新

同组命令

命令动词对象版本变动最近变更
TRIGGERS & RULES触发器与规则9 条
CREATE EVENT TRIGGERCREATEEVENT TRIGGER 111 次
定义一个新的事件触发器现存
ALTER EVENT TRIGGERALTEREVENT TRIGGER 141 次
更改事件触发器的定义现存
DROP EVENT TRIGGERDROPEVENT TRIGGER
移除一个事件触发器现存
CREATE RULECREATERULE
定义一条新的重写规则现存
ALTER RULEALTERRULE
修改一条重写规则的定义现存
DROP RULEDROPRULE
移除一条重写规则现存
CREATE TRIGGERCREATETRIGGER 193 次
定义一个新触发器现存
ALTER TRIGGERALTERTRIGGER 131 次
更改触发器的定义现存
DROP TRIGGERDROPTRIGGER
移除一个触发器现存