You need to enable JavaScript to run this app. PostgreSQL单个会话中能否创建或运行多个事务?
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL单个会话中能否创建或运行多个事务?

PostgreSQL 单个会话是否支持创建/运行多个事务

不支持,单个PostgreSQL会话同一时间仅能存在一个活跃的独立事务。

你给出的测试SQL执行时会出现以下实际表现:

  1. 执行第一个BEGIN transaction;成功开启事务1,后续的update语句执行正常,变更处于事务1的未提交状态
  2. 此时再执行第二个BEGIN transaction;尝试开启事务2时,PostgreSQL会抛出NOTICE: there is already a transaction in progress提示,不会创建新的事务,后续的update table set b=2操作仍然归属到第一个未提交的事务中
  3. 执行第一个COMMIT transaction;时,两个update的变更会被同时提交
  4. 执行第二个COMMIT transaction;时会报错ERROR: there is no transaction in progress,因为当前会话已经没有活跃事务了

测试SQL代码示例:

BEGIN transaction; --tran1
update  table set b=1; 

BEGIN transaction;  --tran2,此处会收到已有事务在运行的提示,不会开启新事务
update  table set b=2;

COMMIT transaction; -- 直接提交事务1内的所有变更
COMMIT transaction; -- 报错,无活跃事务可提交

相关核心规则:

  • 如果你需要同时运行多个独立事务,必须创建多个独立的数据库会话,每个会话单独管理自己的事务生命周期
  • 单个会话内如果需要执行多组事务操作,必须等前一组事务明确提交(COMMIT)或回滚(ROLLBACK)结束后,再开启下一个新事务
  • PostgreSQL没有原生嵌套事务支持,如果你需要类似嵌套事务的部分回滚能力,可以使用SAVEPOINT语法实现单事务内的局部回滚

内容的提问来源于stack exchange,提问作者Arcil Tralleis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 04:15:04