↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

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

百科 / SQL 命令 / 触发器与规则

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

本站手册 · 9.0官方文档 ↗

版本轨迹

相对 PostgreSQL 8.4:语法概要新增 2 行,移除 1 行。

PostgreSQL 9.0 为历史版本,已结束维护。

语法铁道图 PostgreSQL 9.0

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

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 )

语法概要

相对 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 )

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

描述

CREATE CONSTRAINT TRIGGER创建一个约束触发器。它与常规触发器相同,只是触发器引发的时机可以使用SET CONSTRAINTS来调整。约束触发器必须是AFTER ROW触发器。它们既可以在导致触发事件的那条语句结束时引发,也可以在包含它的事务结束时引发;在后一种情况下,称它们为被延迟的(deferred)。一个待处理的延迟触发器引发也可以通过使用SET CONSTRAINTS强制立即发生。

参数

name

约束触发器的名称。这也是使用SET CONSTRAINTS修改触发器行为时所用的名称。该名称不能带模式限定—触发器继承其表的模式。

event

INSERT、UPDATE或DELETE之一;它指定将引发该触发器的事件。可以使用OR指定多个事件。

table_name

触发事件发生的表(可能是模式限定的)的名称。

referenced_table_name

被该约束引用的另一张表(可能是模式限定的)的名称。这个选项用于外键约束,不推荐一般用途使用。

DEFERRABLE
NOT DEFERRABLE
INITIALLY IMMEDIATE
INITIALLY DEFERRED

触发器的默认时机。这些约束选项的细节见CREATE TABLE的文档。

condition

一个决定触发器函数是否实际被执行的布尔表达式。它的作用与CREATE TRIGGER中相同。特别要注意,WHEN条件的求值不会被延迟,而是在行更新操作执行之后立即进行。如果条件的求值结果不为true,则该触发器不会被排入延迟执行的队列。

function_name

触发器引发时要调用的函数。详见CREATE TRIGGER。

arguments

传递给触发器函数的可选参数字符串。详见CREATE TRIGGER。

兼容性

CREATE CONSTRAINT TRIGGER是PostgreSQL对SQL标准的一个扩展。

See Also

语法演化

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

  1. PostgreSQL 9.1← 9.0移除此命令

  2. PostgreSQL 9.0← 8.4语法变化

    + [ WHEN ( condition ) ]+ EXECUTE PROCEDURE function_name ( arguments )− EXECUTE PROCEDURE funcname ( arguments )正文更新
  3. PostgreSQL 8.3← 8.2正文更新

    正文更新
  4. 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 )正文更新
  5. 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 ')'正文更新
  6. PostgreSQL 7.3← 7.2正文更新

    正文更新
  7. PostgreSQL 7.2← 7.1正文更新

    正文更新
  8. PostgreSQL 7.1← 7.0文件改名

    sql-createconstraint.htm → sql-createconstraint.html

  9. PostgreSQL 7.0← 6.5新增此命令

同组命令

命令动词对象版本变动最近变更
TRIGGERS & RULES触发器与规则10 条↑
CREATE CONSTRAINT TRIGGERCREATECONSTRAINT TRIGGER 9.03 次
定义一个新的约束触发器于 9.1 移除
CREATE EVENT TRIGGERCREATEEVENT TRIGGER 111 次
定义一个新的事件触发器现存
ALTER EVENT TRIGGERALTEREVENT TRIGGER 142 次
更改事件触发器的定义现存
DROP EVENT TRIGGERDROPEVENT TRIGGER —
移除一个事件触发器现存
CREATE RULECREATERULE 9.46 次
定义一条新的重写规则现存
ALTER RULEALTERRULE —
修改一条重写规则的定义现存
DROP RULEDROPRULE 9.25 次
移除一条重写规则现存
CREATE TRIGGERCREATETRIGGER 1911 次
定义一个新触发器现存
ALTER TRIGGERALTERTRIGGER 135 次
更改触发器的定义现存
DROP TRIGGERDROPTRIGGER 9.23 次
移除一个触发器现存