SQL COMMAND · 触发器与规则
CREATE EVENT TRIGGER
定义一个新的事件触发器
CREATE触发器与规则引入 10(基线)现存至 20 devel1 次语法变更
- 动词
CREATE- 对象
EVENT TRIGGER- 分组
- 触发器与规则
- 引入版本
- 10(基线)
- 状态
- 现存
- 语法变更次数
- 1
- 手册小节数
- 6
版本轨迹
相对 PostgreSQL 17 无变化。
语法铁道图 PostgreSQL 18
沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。
语法概要
CREATE EVENT TRIGGERnameONevent[ WHENfilter_variableIN (filter_value[, ... ]) [ AND ... ] ] EXECUTE { FUNCTION | PROCEDURE }function_name()
描述
CREATE EVENT TRIGGER创建一个新的事件触发器。 每当指定的事件发生,并且与该触发器关联的WHEN条件(如果有)得到 满足时,就会执行该触发器函数。有关事件触发器的一般性介绍,见 Chapter 38。创建事件触发器的用户将成为其拥有者。
参数
name要赋予新触发器的名称。该名称在数据库内必须唯一。
event触发对给定函数调用的事件名称。有关事件名称的更多信息,见 Section 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语句。
另见
语法演化
相邻大版本之间的差异,新的在前。版本号链接到对应快照。
PostgreSQL 16← 15正文更新
正文更新PostgreSQL 15← 14正文更新
正文更新PostgreSQL 14← 13正文更新
正文更新PostgreSQL 12← 11正文更新
正文更新PostgreSQL 11← 10语法变化
+ EXECUTE { FUNCTION | PROCEDURE } function_name()− EXECUTE PROCEDURE function_name()正文更新
同组命令
| 命令 | 动词 | 对象 | 版本变动 | 最近变更 |
|---|---|---|---|---|
CREATE EVENT TRIGGER | CREATE | EVENT TRIGGER | 111 次 | |
| 定义一个新的事件触发器 | 现存 | |||
ALTER EVENT TRIGGER | ALTER | EVENT TRIGGER | 141 次 | |
| 更改事件触发器的定义 | 现存 | |||
DROP EVENT TRIGGER | DROP | EVENT TRIGGER | — | |
| 移除一个事件触发器 | 现存 | |||
CREATE RULE | CREATE | RULE | — | |
| 定义一条新的重写规则 | 现存 | |||
ALTER RULE | ALTER | RULE | — | |
| 修改一条重写规则的定义 | 现存 | |||
DROP RULE | DROP | RULE | — | |
| 移除一条重写规则 | 现存 | |||
CREATE TRIGGER | CREATE | TRIGGER | 193 次 | |
| 定义一个新触发器 | 现存 | |||
ALTER TRIGGER | ALTER | TRIGGER | 131 次 | |
| 更改触发器的定义 | 现存 | |||
DROP TRIGGER | DROP | TRIGGER | — | |
| 移除一个触发器 | 现存 | |||