gpt4 book ai didi

postgresql - 在 pg_bouncer 后面使用 pg_dump 后,search_path 似乎被更改,其他客户端受到影响

转载 作者:行者123 更新时间:2023-12-05 03:49:11 30 4
gpt4 key购买 nike

我的网络是这样的:

App       (many connections)   pg_bouncer  (few sessions)   PostgreSql
nodes ----------------------- nodes ----------------- nodes

因此 pg_bouncer 多路复用连接,让应用程序节点产生它们都直接连接的错觉。

当我启动 pg_dump 时出现问题:转储完成后几毫秒,所有应用程序节点都失败并显示错误“关系 xxxx 不存在”,尽管表或序列实际上在那里。我很确定原因是 pg_bouncer 操纵了“search_path”变量,因此应用程序节点不再在我的模式中找到表。 即使未导入或执行转储文件,也会在转储时发生这种情况。

请注意,我已经搜索过 SO 和谷歌,我看到有很多线程询问生成的文件中的 search_path ,但这不是我要问的 。我对生成的文件没有任何问题,我的问题是其他客户端正在使用的pg_bouncer session ,我还没有找到任何相关信息。

最明显的解决方法可能是在应用程序中手动设置 search_path,但请注意,不要陷入这种谬误:应用程序一开始就这样做是没有用的,因为它可能会被分配到不同的 pg_bouncer session 在下一次交易中。而且我不能一直设置它。

下一个最明显的解决方法是在启动 pg_dump 后立即将其设置回预期值,但这里存在竞争条件,并且其他节点足够快,所以我担心它们仍然会失败。

有没有办法避免让 pg_dump 操纵这个变量,或者确保它在退出前重置它?

(此外,我想当然地认为 pg_dump 和 search_path 是造成这种情况的原因,你能建议一种方法来确认这一点吗?我所拥有的所有证据都是几毫秒后的错误以及生成文件中的 set search_path 指令如果执行会产生相同的错误。)

谢谢

最佳答案

不要通过 pgbouncer 将 pg_dump 与事务池连接。只需更改端口号,以便它直接连接到数据库。 pg_dump 与事务池不兼容。

您可以通过设置 server_reset_query_always = 1

使其正常工作

关于postgresql - 在 pg_bouncer 后面使用 pg_dump 后,search_path 似乎被更改,其他客户端受到影响,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64066007/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com