pg_restore无法恢复.dump文件问题求助
解决pg_restore恢复Azure PostgreSQL备份的报错问题
我来帮你排查下这两个恢复命令的问题——你用pg_dump -Fc生成的是PostgreSQL的自定义格式备份,这个二进制格式的恢复有几个容易踩的坑,咱们一步步拆解:
第一个命令的问题
你执行的第一条恢复命令:
pg_restore -h test.postgres.database.azure.com -p 5432 -U test@test -C test.dump
这里有两个核心问题:
- 没有显式指定备份文件格式(虽然你导出用了
-Fc,但恢复时明确声明格式能避免自动识别出错); - 使用
-C参数(自动创建目标数据库)时,必须先连接到一个已存在的数据库(比如默认的postgres库),否则pg_restore找不到执行创建库语句的入口。
第二个命令的问题
第二条命令你补了-Fc,但还是缺了关键的-d参数:
pg_restore -h test.postgres.database.azure.com -p 5432 -U test@test -C -Fc test.dump
-d用来指定你要连接的现有数据库(作为创建新库的“跳板”),没有它的话,pg_restore无法确定连接目标,自然会报错。
正确的恢复命令
你可以试试这条命令,先连接到默认的postgres数据库,让pg_restore自动创建test库并完成恢复:
pg_restore -h test.postgres.database.azure.com -p 5432 -U test@test -d postgres -C -Fc test.dump
如果目标环境里已经存在test数据库,你不需要-C参数,直接指定恢复到该库即可:
pg_restore -h test.postgres.database.azure.com -p 5432 -U test@test -d test -Fc test.dump
额外注意事项
- 确保
test@test用户有足够权限:比如用-C时需要创建数据库的权限,恢复时需要目标库的写入权限; - 检查Azure PostgreSQL的防火墙规则,确认执行恢复的机器IP在允许列表内;
- 如果备份文件较大,加上
-v参数能显示详细日志,方便定位具体卡住的步骤。
内容的提问来源于stack exchange,提问作者David Parsonson
相关产品推荐
相关产品推荐

