如何退出数据库恢复模式(目前锁定在只读模式)

How to exit out of database recovery mode (currently locked in read-only mode)

为了备份或复制远程数据库,前段时间建立了一个从数据库。但是,我不能再使用基于 Delphi 的 ETL 写入数据库(ETL 适用于另一个数据库对,但迄今为止从未用于该特定对)。复制数据库是由后来离开公司的其他人设置的。我有理由相信这已经被设置为一个复制数据库,但是离开后的员工告诉我,由于不相关的原因,复制从来没有工作过。使用 ETL,我们可以(使用 SQL 查询)从一个数据库读取,然后写回复制数据库,或者应该能够,因为它目前是只读的。

我试过:

  1. 维护如VACUUM
  2. 尝试删除表和整个数据库
  3. 从主数据库恢复完整备份

None 这些工作,我被告知数据库是只读的。

我查看了 postgresql.conf 并看到 hot_standby 已被选中,所以我认为(但不是 100% 确定)数据库处于某种复制模式(我已经从未接触过 Postgres 支持的复制,所以我不知道)。

我检查了 pg_hba.conf 中的权限,发现其中有一些用于复制的凭据。我不确定这是否为数据库激活 "replication mode",或者只是意味着这些凭据仅用于复制。

我已经浏览了几个月的日志文件(自从我们的 IT 部门大约 5 个月前升级了整个网络以来,这一直没有用)。我看到下面看到的日志文件内容,几个月来一遍又一遍地重复。请注意,下面显示的 IP 地址列在 pg_hba.conf 文件中,因此凭据有效。

数据库处于恢复模式,正如我通过使用发现的:

select pg_is_in_recovery();

这向我解释了为什么它是只读的,但为什么我不能恢复数据库,或者只是简单地转储整个数据库并重新开始(这是一个备份,所以 losing/restoring 这不是问题)?

我很想尝试修改 recovery.conf 文件(存在),但我 read/believe 一旦恢复启动(在我的情况下已经启动)修改文件将无效.

我使用的是旧版 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.

有几个选项适合我:

  1. 将数据库从只读复制数据库转换为标准 read/write 数据库或
  2. Dump/drop 整个数据库,这样我就可以创建一个具有写入功能的新数据库。

看起来这两个数据库集群已经设置好进行复制,但是其中一台机器上的配置更改中断了复制(在主服务器上更改了 pg_hba.conf,更改了 IP 地址,...)。

这是您想要的解决方案的方法:

  1. 使待机退出恢复模式: 运行

    /path/to/pg_ctl promote -D /path/to/data/directory
    

    作为操作系统用户 postgres.

  2. 待命
  3. Nuking 备用数据库: 使用 rm -rf(或操作系统上的等效项)删除备用数据库上的数据目录。终止所有 PostgreSQL 进程。

    然后使用initdb在同一位置创建一个新的数据库集群。