CREATE EVENT TRIGGER
定义一个新的事件触发器
英文手册覆盖始于 PostgreSQL 6.4. 来源历史与运行验证各自保留独立版本边界。
当前阅读 PG 18·选择有来源记录的版本
- anchor
- SQL-CREATEEVENTTRIGGER
- file
- sql-createeventtrigger.html
- lang
- en
- name
- CREATE EVENT TRIGGER
- purpose
- define a new event trigger
- purpose zh
- 未知
- sections same as
- 未知
- slug
- 18
- synopsis text
- 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()语法图
从左向右阅读;分支表示选择,旁路表示可选,循环表示重复。点击带下划线的参数可打开对应规则。
版本定义 PG 18
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_variable是TAG。filter_value与相关
filter_variable关联的一组值;当其取值属于该列表时,触发器就会被触发。对于TAG,这表示一组命令标签(例如'DROP FUNCTION')。function_name由用户提供的函数,声明为不接受参数并返回类型
event_trigger。在
CREATE EVENT TRIGGER的语法中,关键字FUNCTION和PROCEDURE是等效的,但被引用的对象无论如何都必须是函数,而不是过程。这里使用关键字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语句。
另见
ALTER EVENT TRIGGER, DROP EVENT TRIGGER, CREATE FUNCTION比较版本
完整来源事实
synopsis html
CREATE EVENT TRIGGER <em class="replaceable"><code>name</code></em>
ON <em class="replaceable"><code>event</code></em>
[ WHEN <em class="replaceable"><code>filter_variable</code></em> IN (<em class="replaceable"><code>filter_value</code></em> [, ... ]) [ AND ... ] ]
EXECUTE { FUNCTION | PROCEDURE } <em class="replaceable"><code>function_name</code></em>()来源引用
定义来源
center · PostgreSQL 18 · a709ab85
正文语言: zh-Hans · 1b5ca64c