我的 PostgreSQL 数据库似乎在一次不干净的关机后损坏了,现在我不知道如何让它退出恢复模式。由于数据库没有得到非常频繁的更新,最后一次已知的良好夜间备份应该具有数据的当前副本。
跑步
sudo -u postgres pg_restore /path/to/backup.post
只是在控制台上转储了一长串 SQL 命令,但没有其他任何事情发生。
怀疑数据损坏,我只是将整个data_directory
(如 参考资料/etc/postgresql/9.6/main/postgresql.conf
)移动到不同的路径。现在我想知道如何重新创建数据目录的“原始”版本,然后我可以在其中恢复备份。我重新创建了路径并将其所有者设置为postgres:postgres
,但尝试重新启动 PostgreSQL,重新运行pg_restore
,甚至dpkg_reconfigure
似乎没有成功 - 目录仍然是空的。
丢弃损坏的 PostgreSQL data_directory
,用新的替换它并恢复最后一个已知的良好备份的正确程序是什么?
操作系统是 Raspbian 9。
pg_restore
在没有该选项的情况下运行-d $DATABASE
只会打印将数据库恢复到标准输出的命令,但实际上不会触及任何数据库。1.重建数据目录
重建数据目录的命令是
initdb
. 完整命令:这适用于 PostgreSQL 9.6;对于任何其他版本,您需要更改路径中的版本号并确保路径
initdb
仍然正确。$DB_PATH
是您的数据目录的路径。有关其他选项,请参见手册页,例如设置不同的语言环境或指定凭据。
在我的情况下,引导数据库以段错误终止,表明所涉及的二进制文件(或脚本)损坏。所以我不得不跑
从头开始重新安装 PostgreSQL 相关的二进制文件。(如果您不确定要重新安装哪些软件包,请运行
dpkg -l | grep postgres
并重新安装此处列出的所有内容。)2.恢复数据
-C
将创建数据库,如果它不存在的话。使用时
-C
,postgres
可以替换为系统上存在的任何数据库;它仅用于初始连接,但不会触及数据库本身。(如果没有-C
,您将需要输入要还原到的现有数据库。)-c
将在创建它们之前删除任何现有对象(例如数据库、表等)。这可确保生成的数据库准确包含备份中的内容,而您要还原到的数据库中没有剩余内容。--if-exists
-c
如果数据库中尚不存在某些对象,则在使用时防止(无害但令人困惑)错误消息。