pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
SET CONSTRAINTS — 设置当前事务的约束模式
SET CONSTRAINTS { ALL | constraint [, ...] } { DEFERRED | IMMEDIATE }
SET CONSTRAINTS设置当前事务中约束检查的 行为。在 IMMEDIATE 模式下,约束在每条语句结束时检查。在 DEFERRED 模式下,约束直到事务提交时才 检查。
这条命令只更改当前事务内约束的行为。因此,如果你在一个显式 事务块(例如用BEGIN启动的事务)之外 执行这条命令,它将看不出有任何效果。如果你希望更改一个 约束的行为而又不必在每个事务中都发出一条 SET CONSTRAINTS命令,可以在创建约束时 指定 INITIALLY DEFERRED 或 INITIALLY IMMEDIATE。
当你把一个约束的模式改为 IMMEDIATE 时,新的约束模式会追溯生效: 任何原本会在事务结束时(使用 DEFERRED时)检查的未完成数据修改,都会 改在SET CONSTRAINTS命令执行期间检查。
约束在创建时总是被赋予下列三种特性之一: INITIALLY DEFERRED、 INITIALLY IMMEDIATE DEFERRABLE或 INITIALLY IMMEDIATE NOT DEFERRABLE。第三类 不受SET CONSTRAINTS命令的影响。
目前,只有外键约束受此设置影响。检查和唯一约束实际上总是 初始立即且不可推迟的。
SET CONSTRAINTS 定义于 SQL92 和 SQL99。 PostgreSQL中的实现符合标准定义的 行为,但 PostgreSQL 有一个限制: SET CONSTRAINTS 不能应用于检查或唯一约束。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。