一段时间以前设置了一个从数据库,目的是备份或复制远程数据库。但是,我再也无法使用基于Delphi的ETL写入数据库(ETL适用于另一个数据库对,但迄今为止从未用于此特定对(。复制数据库是由此后离开公司的其他人设置的。我可以合理地确定这已被设置为复制数据库,但是自那以后离开的员工告诉我,复制从未起作用,原因是无关的原因。使用ETL,我们可以(使用SQL查询(从一个数据库中读取,然后写回复制数据库,或者应该能够,因为当前仅读取。
。我尝试过:
- 维护,例如
VACUUM
- 尝试丢弃表和整个数据库
- 从主数据库还原完整的备份
这些工作都没有,我被告知数据库是只读的。
我已经查看了postgresql.conf
并看到检查了hot_standby
,所以我认为(但不是100%确定(数据库处于某种复制模式(我从未触摸过Postgres支持的复制,所以我不知道(。
我已经检查了pg_hba.conf
中的权限,并看到其中有一些凭据进行复制。我不确定这是否激活数据库的"复制模式",还是仅表示这些凭据仅用于复制。
我已经经历了数月的日志文件(自从我们的IT部门大约5个月前升级整个网络以来一直没有工作(。我看到下面看到的日志文件内容,一遍又一遍地重复几个月。注意下面显示的IP地址在pg_hba.conf
文件中列出,因此凭据有效。
我通过以下方式发现数据库处于恢复模式。
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.
有几个选择对我有用:
- 将数据库从仅读取的复制数据库转换为标准读/写数据库或
- 转储/丢弃整个数据库,以便我可以创建一个具有写入功能的新数据库。
看起来已经设置了两个数据库簇以进行复制,但是在其中一台机器上的配置更改破坏了复制(在主要的,更改的IP地址上更改了pg_hba.conf
,&Hellip;(。
这是您所需解决方案的方式:
-
将备用备用带出恢复模式:运行
/path/to/pg_ctl promote -D /path/to/data/directory
作为操作系统用户
postgres
。
在备用系统上 nuking待机:使用
rm -rf
(或操作系统上的等效(删除备用数据目录。杀死所有PostgreSQL过程。然后使用
initdb
在同一位置创建一个新的数据库群集。