得到的主机变量等于数据库主机
host=<masters fqdn>,<replicas fqdn>
但是,当程序尝试在数据库中写入内容时,会出现错误:
cannot set transaction read-write mode during recovery (SQLSTATE 0A000)
看起来 pgx 尝试写入副本,而不是主
我发现,这个问题可以通过更改连接选项来解决:
cfg.Config.RuntimeParams["target_session_attrs"] = "read-write"
但这行不通
请帮我解决这个问题
您的服务器处于恢复模式,并且您正在尝试对副本执行写入操作,该副本在恢复期间通常为只读。
您需要在副本上的
hot_standby = on
中设置 postgresql.conf
,并在主节点上确认 max_wal_senders
和 wal_level = replica
。在主服务器的 postgresql.conf
中,synchronous_standby_names
参数可能设置为空字符串,应将其更改为您的备用服务器名称。并且,删除任何 recovery.conf
或 recovery.signal
文件 - 这些文件用于控制恢复过程,并且可能包含影响只读与读写行为的设置。
重新启动主服务器和副本服务器以使设置生效。