PostgreSQL 8.2.3 中文文档
后退快退快进前进

SET CONSTRAINTS

名称

SET CONSTRAINTS -- 设置当前事务的约束检查模式

语法

SET CONSTRAINTS { ALL | name [, ...] } { DEFERRED | IMMEDIATE }

描述

SET CONSTRAINTS 设置当前事务里的约束检查的特性。IMMEDIATE 约束是在每条语句后面进行检查。DEFERRED 约束一直到事务提交时才检查。每个约束都有自己的 IMMEDIATEDEFERRED 模式。

从创建的时候开始,一个约束总是给定为 DEFERRABLE INITIALLY DEFERRED, DEFERRABLE INITIALLY IMMEDIATE, NOT DEFERRABLE 三个特性之一。第三种总是 IMMEDIATE ,并且不会受 SET CONSTRAINTS 影响。头两种以指定的方式启动每个事务,但是他们的行为可以在事务里用 SET CONSTRAINTS 改变。

带着一个约束名列表的 SET CONSTRAINTS 改变这些约束的模式(都必须是可推迟的)。如果有多个约束匹配某个名字,那么所有都会被影响。SET CONSTRAINTS ALL 改变所有可推迟约束的模式。

SET CONSTRAINTS 把一个约束从 DEFERRED 改成 IMMEDIATE 的时候,新模式反作用式地起作用:任何将在事务结束准备进行的数据修改都将在 SET CONSTRAINTS 的时候执行检查。如果违反了任何约束,SET CONSTRAINTS 都会失败(并且不会修改约束模式)。因此,SET CONSTRAINTS 可以用于强制在事务中某一点进行约束检查。

目前,只有外键约束被这个设置影响。检查和唯一约束总是不可推迟的。

注意

这个命令只在当前事务里修改约束的行为。因此,如果你在事务块之外(BEGIN/COMMIT 对)执行这个命令,它将没有任何作用。

兼容性

这条命令与 SQL 标准里定义的行为兼容,只不过,在 PostgreSQL 里,它只适用于外键约束。


后退首页前进
SET上一级SET ROLE