我正在尝试在 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),当我确定我已连接到 5433 时,我猜它正在尝试在 5432 中恢复。以前有人遇到过这个问题吗?