如何在PostgreSQL中恢复集群备份



我正在尝试恢复PostgreSQL中的集群备份。我使用了pg_dumpall,它生成了一个带有SQL查询的纯文本文件。然而,当我试图恢复它时,我得到这个错误:

pg_restore: [archiver]输入文件不合法归档文件

当我试图恢复数据库的备份(使用pg_dump生成)时,我也收到了相同的错误,但我解决了这个问题。在这种情况下,pg_restore无法识别SQL查询的纯文本,因此我更改了命令:

pg_dump db_name -Fc -U user -h host -p port > my_db_backup.dump

改为:

pg_dump db_name -Fp -U user -h host -p port > my_db_backup.dump

这样生成的文件不是纯文本的,所以pg_restore可以很好地工作。

现在,我正在尝试对pg_dumpall进行相同的管理,但是没有-F参数。我的代码(在Python3中,但这个命令对任何语言都是一样的)是:

pg_dumpall -U user -h host -p port > my_cluster_backup.dump

你知道怎么处理这个吗?或者至少如何以任何方式恢复集群备份?提前感谢!

编辑

如果我使用psql来恢复:

psql -U user -h host -p port -f my_cluster_backup.dump postgres'

似乎可以工作,控制台显示了很多命令,但每个命令都给出了"它已经存在"的错误。我无法理解,因为我有两个集群(端口5432和5433),我猜它试图在5432中恢复,当我确信我连接到5433。有人遇到过这个问题吗?

参见pg_dumpall doc:

末尾的示例

转储所有数据库:

$ pg_dumpall> db.out

要从该文件重新加载数据库,可以使用:

$ PSQL -f db。出postgres

(在这里连接到哪个数据库并不重要由pg_dumpall创建的脚本文件将包含适当的创建和连接已保存的数据库的命令。)

本例中的db.out是一个SQL命令脚本,意味着直接提供给psql解释器。

pg_restore不能使用普通SQL文件作为输入。它的主要/原始目的是将非文本格式的备份作为输入(例如pg_dump -Fc)并产生相应的SQL文件作为输出,或者使用并行路径(-j)直接恢复到数据库中

当输入已经是一个SQL脚本时,使用pg_restore而不是psql真的没有意义,所以大概这就是为什么作者没有费心支持SQL脚本作为pg_restore的输入。

现在,您可以使用pg_basebackup备份整个节点。

相关内容

  • 没有找到相关文章

最新更新