You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

EDB/开源Postgres中ALTER SESSION SET CONSTRAINTS=DEFERRED等效语句

ALTER SESSION SET CONSTRAINTS = DEFERRED是Oracle生态的常用语法,作用是将当前会话内所有标记为DEFERRABLE(可延迟)的约束,检查时机从单条DML执行后立即校验,改为事务提交时统一校验。该语句在两类PostgreSQL数据库中的实现方式如下:

EDB Postgres(EnterpriseDB 高级服务器)

EDB Postgres 内置了完整的Oracle语法兼容层,直接原生支持原语句写法,执行逻辑和Oracle完全一致:设置生效后,当前会话后续所有事务内的可延迟约束,默认都会采用提交时检查的策略,无需每个事务重复配置。
直接执行原语句即可:

ALTER SESSION SET CONSTRAINTS = DEFERRED;
开源PostgreSQL

开源PostgreSQL没有提供会话级别的全局约束延迟配置语法,原生SET CONSTRAINTS命令的作用域仅为当前事务,事务提交或回滚后设置会自动失效。
要实现和原语句等效的效果,需要在每个事务的起始位置执行如下命令:

SET CONSTRAINTS ALL DEFERRED;

执行后当前事务内所有可延迟约束,都会在事务提交时统一校验,和Oracle原语句单事务内的行为完全一致。
如果需要实现会话层面自动生效的效果,可以通过连接层配置实现:比如在数据库连接建立的初始化回调中自动执行该命令,或者为业务使用的数据库账号配置对应事件触发器,在事务启动时自动执行该设置。开源PostgreSQL本身没有内置可直接持久化该配置的会话级参数。


注意:无论在EDB Postgres还是开源PostgreSQL中,只有创建约束时明确指定了DEFERRABLE属性的约束(含外键、唯一约束、检查约束等)才会受延迟设置影响;默认创建的NOT DEFERRABLE约束会始终在单条DML执行后立即校验,无法被延迟。

内容的提问来源于stack exchange,提问作者MD NASEEM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:06:22