前一段时间已建立一个从数据库,用于备份或复制远程数据库。但是,我无法再使用基于Delphi的ETL向数据库写入数据(该ETL可用于另一对数据库,但迄今为止,从未用于该特定数据库对)。复制数据库是由离开公司的其他人建立的。我可以肯定地确定已将其设置为复制数据库,但是此后离开的员工告诉我,复制永远不会出于无关的原因而工作。使用ETL,我们可以(使用SQL查询)从一个数据库读取并写回到复制数据库,或者应该能够,因为它目前是只读的。
我尝试过:
VACUUM
之类的维护这些都不起作用,并且我被告知数据库是只读的。
我查看了postgresql.conf
,并检查了hot_standby
,所以我认为(但不是100%确信)数据库处于某种复制模式(我从未接触过)复制是Postgres支持的,所以我不知道。)
我在pg_hba.conf
中检查了权限,并发现其中有一些用于复制的凭据。我不确定这是否会激活数据库的“复制模式”,或者仅表示这些凭据仅用于复制。
我已经使用了数月的日志文件(自从大约5个月前我们的IT部门升级了整个网络以来,这一直没有起作用)。我看到下面显示的日志文件内容,反复重复了几个月。请注意,pg_hba.conf
文件中列出了下面显示的IP地址,因此凭据有效。
该数据库处于恢复模式,如我所发现的那样:
select pg_is_in_recovery();
这向我解释了为什么它是只读的,但是为什么我不能还原数据库,或者只是简单地转储整个数据库并重新启动(这是备份,因此丢失/恢复不是问题)?
我很想尝试修改recovery.conf
文件(存在),但是我读/相信,一旦开始恢复(就我而言,已经恢复),修改文件将无效。
我使用的是Postgres的旧版本:9.2.9
这里的任何帮助将不胜感激,因为我已经为此进行了超过一天的努力。
日志文件条目(示例):
FATAL: could not connect to the primary server:
FATAL: no pg_hba.conf entry for replication connection from host "192.168.20.2", user "postgres", SSL off
FATAL: could not connect to the primary server: server closed the connection unexpectedly
This probably means the server terminated abnormally before or while processing the request.
几个选项对我有用:
答案 0 :(得分:1)
似乎已经为两个数据库集群设置了复制功能,但是其中一台计算机上的配置更改中断了复制(更改了主pg_hba.conf
,更改了IP地址,...)。
这是您所需解决方案的出路:
使备用数据库退出恢复模式:运行
/path/to/pg_ctl promote -D /path/to/data/directory
以备用身份作为操作系统用户postgres
。
标记备用数据库:使用rm -rf
(或操作系统上的等效目录)删除备用数据库上的数据目录。杀死所有PostgreSQL进程。
然后使用initdb
在相同位置创建一个新的数据库集群。