SQL COMMAND · 触发器与规则
CREATE CONSTRAINT TRIGGER
定义一个新的约束触发器
define a new constraint trigger
CREATE触发器与规则引入 7.0于 9.1 移除3 次语法变更
- 动词
CREATE- 对象
CONSTRAINT TRIGGER- 分组
- 触发器与规则
- 引入版本
- 7.0
- 状态
- 于 9.1 移除
- 语法变更次数
- 3
- 手册小节数
- 4
版本轨迹
相对 PostgreSQL 8.4:语法概要新增 2 行,移除 1 行。
PostgreSQL 9.0 为历史版本,已结束维护。
语法铁道图 PostgreSQL 9.0
沿轨道从左向右阅读,分岔表示选择,绕行表示可选,回环表示重复。方框为参数,点击带下划线的参数可展开子规则。
语法概要
相对 PostgreSQL 8.4 新增 2 行,移除 1 行;新增行以绿色标记。
CREATE CONSTRAINT TRIGGER name AFTER event [ OR ... ] ON table_name [ FROM referenced_table_name ] { NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } } FOR EACH ROW [ WHEN ( condition ) ] EXECUTE PROCEDURE function_name ( arguments )
查看移除的 1 行
− EXECUTE PROCEDURE funcname ( arguments )
描述
CREATE CONSTRAINT TRIGGER创建一个约束触发器。它与常规触发器相同,只是触发器引发的时机可以使用SET CONSTRAINTS来调整。约束触发器必须是AFTER ROW触发器。它们既可以在导致触发事件的那条语句结束时引发,也可以在包含它的事务结束时引发;在后一种情况下,称它们为被延迟的(deferred)。一个待处理的延迟触发器引发也可以通过使用SET CONSTRAINTS强制立即发生。
参数
name约束触发器的名称。这也是使用
SET CONSTRAINTS修改触发器行为时所用的名称。该名称不能带模式限定—触发器继承其表的模式。eventINSERT、UPDATE或DELETE之一;它指定将引发该触发器的事件。可以使用OR指定多个事件。table_name触发事件发生的表(可能是模式限定的)的名称。
referenced_table_name被该约束引用的另一张表(可能是模式限定的)的名称。这个选项用于外键约束,不推荐一般用途使用。
DEFERRABLENOT DEFERRABLEINITIALLY IMMEDIATEINITIALLY DEFERRED触发器的默认时机。这些约束选项的细节见CREATE TABLE的文档。
condition一个决定触发器函数是否实际被执行的布尔表达式。它的作用与CREATE TRIGGER中相同。特别要注意,
WHEN条件的求值不会被延迟,而是在行更新操作执行之后立即进行。如果条件的求值结果不为true,则该触发器不会被排入延迟执行的队列。function_name触发器引发时要调用的函数。详见CREATE TRIGGER。
arguments传递给触发器函数的可选参数字符串。详见CREATE TRIGGER。
兼容性
CREATE CONSTRAINT TRIGGER是PostgreSQL对SQL标准的一个扩展。
See Also
语法演化
相邻大版本之间的差异,新的在前。版本号链接到对应快照。
PostgreSQL 9.1← 9.0移除此命令
PostgreSQL 9.0← 8.4语法变化
+ [ WHEN ( condition ) ]+ EXECUTE PROCEDURE function_name ( arguments )− EXECUTE PROCEDURE funcname ( arguments )正文更新PostgreSQL 8.3← 8.2正文更新
正文更新PostgreSQL 8.2← 8.1语法变化
+ AFTER event [ OR ... ]+ ON table_name+ [ FROM referenced_table_name ]+ { NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } }+ EXECUTE PROCEDURE funcname ( arguments )− AFTER events ON− tablename constraint attributes− FOR EACH ROW EXECUTE PROCEDURE funcname ( args )正文更新PostgreSQL 7.4← 7.3语法变化
+ tablename constraint attributes+ FOR EACH ROW EXECUTE PROCEDURE funcname ( args )− relation constraint attributes− FOR EACH ROW EXECUTE PROCEDURE func '(' args ')'正文更新PostgreSQL 7.3← 7.2正文更新
正文更新PostgreSQL 7.2← 7.1正文更新
正文更新PostgreSQL 7.1← 7.0文件改名
sql-createconstraint.htm → sql-createconstraint.html
PostgreSQL 7.0← 6.5新增此命令
同组命令
| 命令 | 动词 | 对象 | 版本变动 | 最近变更 |
|---|---|---|---|---|
CREATE CONSTRAINT TRIGGER | CREATE | CONSTRAINT TRIGGER | 9.03 次 | |
| 定义一个新的约束触发器 | 于 9.1 移除 | |||
CREATE EVENT TRIGGER | CREATE | EVENT TRIGGER | 111 次 | |
| 定义一个新的事件触发器 | 现存 | |||
ALTER EVENT TRIGGER | ALTER | EVENT TRIGGER | 142 次 | |
| 更改事件触发器的定义 | 现存 | |||
DROP EVENT TRIGGER | DROP | EVENT TRIGGER | — | |
| 移除一个事件触发器 | 现存 | |||
CREATE RULE | CREATE | RULE | 9.46 次 | |
| 定义一条新的重写规则 | 现存 | |||
ALTER RULE | ALTER | RULE | — | |
| 修改一条重写规则的定义 | 现存 | |||
DROP RULE | DROP | RULE | 9.25 次 | |
| 移除一条重写规则 | 现存 | |||
CREATE TRIGGER | CREATE | TRIGGER | 1911 次 | |
| 定义一个新触发器 | 现存 | |||
ALTER TRIGGER | ALTER | TRIGGER | 135 次 | |
| 更改触发器的定义 | 现存 | |||
DROP TRIGGER | DROP | TRIGGER | 9.23 次 | |
| 移除一个触发器 | 现存 | |||