postgres 中 SET XACT_ABORT ON 的替代方法是啥

Posted

技术标签:

【中文标题】postgres 中 SET XACT_ABORT ON 的替代方法是啥【英文标题】:What is the alternative to SET XACT_ABORT ON in postgrespostgres 中 SET XACT_ABORT ON 的替代方法是什么 【发布时间】:2021-03-22 12:52:25 【问题描述】:

在 SQL Server 中,我们在存储过程中使用SET XACT_ABORT ON。那么,在 Postgres 中,SET XACT_ABORT ON 的替代语句是什么。

SET XACT_ABORT:

SET XACT_ABORT 为 ON 时,如果 Transact-SQL 语句引发运行时错误,则整个事务将终止并回滚。

SET XACT_ABORT 为OFF 时,在某些情况下,只有引发错误的Transact-SQL 语句被回滚,事务继续处理。根据错误的严重程度,即使 SET XACT_ABORT 为 OFF,也可能回滚整个事务。 OFF 是 T-SQL 语句中的默认设置,而 ON 是触发器中的默认设置。

【问题讨论】:

它有什么作用? @a_horse_with_no_name 抱歉,现在我已经更新了问题。谢谢!! 【参考方案1】:

Microsoft says:

指定当 Transact-SQL 语句引发运行时错误时 SQL Server 是否自动回滚当前事务。

这是 PostgreSQL 中默认且唯一的行为(除非您使用保存点),因此您无需执行任何操作。

【讨论】:

好吧,在 postgres 中我们不必这样做,因为默认情况下 postgres 的行为类似于您所指的 SET XACT_ABORT ON(MSSQL) 功能?

以上是关于postgres 中 SET XACT_ABORT ON 的替代方法是啥的主要内容,如果未能解决你的问题,请参考以下文章

在存储过程中写SET XACT_ABORT ON 有什么用,不写会发生什么问题

存储过程中的 SET XACT_ABORT ON 和事务

SQL SET XACT_ABORT各种用法及显示结果

如何使 SET XACT_ABORT ON 回滚事务?

设置 xact_abort 并尝试一起捕捉

XACT_ABORT 不回滚 SQL Server 2012 上的事务