首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在使用pg_dump后的pg_bouncer之后,search_path似乎被更改了,其他客户端也受到影响。

在使用pg_dump后的pg_bouncer之后,search_path似乎被更改了,其他客户端也受到影响。
EN

Stack Overflow用户
提问于 2020-09-25 14:23:37
回答 1查看 296关注 0票数 3

我的电视网是这样的:

代码语言:javascript
运行
复制
App       (many connections)   pg_bouncer  (few sessions)   PostgreSql
nodes  -----------------------   nodes   -----------------    nodes

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

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

注意,我已经搜索过了,google和我看到生成的文件中有很多关于search_path的线程,但是并不是我想要的。我对生成的文件没有任何问题,我的问题是其他客户端正在使用的pg_bouncer会话,而且我没有发现任何关于此的内容。

最明显的解决办法可能是在应用程序中手动设置search_path,但请注意,不要陷入这种谬误:应用程序一开始就这样做是没有用的,因为在下一个事务中可能会给它分配一个不同的pg_bouncer会话。我不可能一直都在设置它。

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

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

(而且,我认为pg_dump和search_path是造成这种情况的原因,你能建议一种方法来证实这一点吗?所有的证据都是几毫秒后的错误,以及在生成的文件中设置search_path指令,如果执行它会产生相同的错误。)

谢谢

EN

回答 1

Stack Overflow用户

发布于 2020-09-25 17:06:24

不要通过pgb强将pg_dump与事务池连接起来。只需更改端口号,就可以直接连接到数据库。pg_dump与事务池不兼容。

通过设置server_reset_query_always = 1,您可能无论如何都可以让它工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64066007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档