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

PostgreSQL主从+Spring Boot环境下,事务内未提交INSERT能否从从库读数据?

问题解答

首先明确结论:无论使用哪种事务传播特性,都无法从从库读取到未提交INSERT操作的记录,具体原因如下:

1. PostgreSQL主从复制的核心逻辑

PostgreSQL的主从复制是基于已提交事务的WAL(预写日志)同步实现的——只有当主库上的事务完成commit后,对应的WAL日志才会被发送到从库并回放。未提交的事务数据仅存在于主库当前事务的上下文里,既不会对主库的其他会话可见,更不会同步到从库。

2. 两种事务传播特性的实际行为

(1)Propagation.REQUIRED

这个传播特性会让只读事务直接加入外层的主事务,相当于整个操作都处于同一个未提交的事务中。此时如果你的Spring配置将只读事务路由到从库,从库根本不存在这条未提交的记录;哪怕没有路由,也是在主库的同一个事务内才能读到,但你要的是从库读取,所以肯定拿不到目标数据。

(2)Propagation.NESTED

嵌套事务是基于数据库的保存点(Savepoint)实现的,本质上仍依附于外层主事务,并没有独立提交。只要外层事务未执行commit,这条INSERT的数据就不会进入主库的已提交数据集,自然也不会同步到从库,从库查询必然返回空。

额外补充

如果想让从库读到这条记录,必须先执行主事务的commit,等主从复制完成(异步复制可能存在延迟,同步复制则会等待从库确认)后,才能在从库查询到目标记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 22:25:21