登录
首页 >  Golang >  Go问答

SQL包、PostgreSQL和PgBouncer的重试功能

来源:stackoverflow

时间:2024-03-13 20:30:26 442浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《SQL包、PostgreSQL和PgBouncer的重试功能》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

让我们想象一下我们有 postgresql 和 pgbouncer(具有事务模式)。 我们还计划执行以下交易:

begin;

update a ...;
update b ...;
select c ...;
update d ...;

commit;

当交易开始时,pgbouncer 为我们提供连接。 然后我们执行:

update a; -- successful
update b; -- successful
select a; -- successful
update d; -- failed, because pgbouncer restarted.

然后我们尝试使用 go db 客户端重试

UPDATE d;

第三次我们获取连接并执行查询。该查询会在同一个事务中执行还是会在新连接上执行并导致状态不一致?

或者每个语句执行时都带有一些标识符,可以说它与某个事务相关?


正确答案


我不能 100% 确定,因为我不熟悉 PgBouncer 或 Postgres 的内部结构,但按理说交易绑定到连接,因为交易没有标识。因此,只要 TCP/SQL 连接没有重新启动,您就应该能够恢复。但是,如果任何应用程序重新启动,那么事务就会消失。

今天关于《SQL包、PostgreSQL和PgBouncer的重试功能》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>