如何将 pgxpool 连接到主主机和副本主机并可以写入表?

问题描述 投票:0回答:1

得到的主机变量等于数据库主机

host=<masters fqdn>,<replicas fqdn>

但是,当程序尝试在数据库中写入内容时,会出现错误:

cannot set transaction read-write mode during recovery (SQLSTATE 0A000)

看起来 pgx 尝试写入副本,而不是主

我发现,这个问题可以通过更改连接选项来解决:

cfg.Config.RuntimeParams["target_session_attrs"] = "read-write"

但这行不通

请帮我解决这个问题

postgresql go database-replication pgx
1个回答
0
投票

您的服务器处于恢复模式,并且您正在尝试对副本执行写入操作,该副本在恢复期间通常为只读。

您需要在副本上的

hot_standby = on
中设置
postgresql.conf
,并在主节点上确认
max_wal_senders
wal_level = replica
。在主服务器的
postgresql.conf
中,
synchronous_standby_names
参数可能设置为空字符串,应将其更改为您的备用服务器名称。并且,删除任何
recovery.conf
recovery.signal
文件 - 这些文件用于控制恢复过程,并且可能包含影响只读与读写行为的设置。

重新启动主服务器和副本服务器以使设置生效。

© www.soinside.com 2019 - 2024. All rights reserved.