【发布时间】:2019-09-24 16:51:42
【问题描述】:
为了备份或复制远程数据库,前段时间建立了一个从数据库。但是,我不能再使用基于 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.
有几个选项对我有用:
- 将数据库从只读复制数据库转换为标准读/写数据库或
- 转储/删除整个数据库,以便我可以创建一个具有写入功能的新数据库。
【问题讨论】:
标签: postgresql recovery