# 创建事件触发器

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

# 概要

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

# 描述

创建事件触发器创建一个新的事件触发器。每当指定的事件发生并且什么时候与触发器关联的条件(如果有)满足,将执行触发器函数。有关事件触发器的一般介绍,请参阅第 40 章.创建事件触发器的用户成为其所有者。

# 参数

姓名

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

事件

触发对给定函数的调用的事件的名称。看第 40.1 节有关事件名称的更多信息。

过滤器变量

用于过滤事件的变量的名称。这使得可以将触发器的触发限制为支持它的情况的子集。目前唯一支持的*过滤器变量*是标签.

过滤器值

关联的值列表*过滤器变量*触发器应该触发的。为了标签,这意味着命令标签列表(例如,'删除功能')。

函数名

用户提供的函数,声明为不带参数并返回类型事件触发器.

在语法中创建事件触发器, 关键词功能程序是等价的,但引用的函数在任何情况下都必须是函数,而不是过程。关键字的使用程序这里是历史的和已弃用的。

# 笔记

只有超级用户可以创建事件触发器。

事件触发器在单用户模式下被禁用(请参阅postgres)。如果错误的事件触发器严重禁用数据库以至于您甚至无法删除触发器,请在单用户模式下重新启动,您将能够做到这一点。

# 例子

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

# 也可以看看

改变事件触发器,丢弃事件触发器,创建函数