[英]How to restore a cluster backup in 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.out postgres
(此处连接哪个数据库并不重要,因为 pg_dumpall 创建的脚本文件将包含用于创建和连接到已保存数据库的相应命令。)
本例中的db.out
是一个 SQL 命令脚本,旨在直接提供给psql
解释器。
pg_restore不适用于纯 SQL 文件作为输入。 它的主要/原始目的是将非文本格式的备份作为输入(例如pg_dump -Fc
)并生成相应的 SQL 文件作为输出,或者使用并行路径( -j
)直接恢复到数据库中
当输入已经是 SQL 脚本时,使用pg_restore
而不是psql
确实没有意义,所以大概这就是作者不费心支持 SQL 脚本作为pg_restore
输入的原因。
现在,你有 pg_basebackup 来备份整个节点。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.