Windows Server 2012R2下PostgreSQL9.5恢复.backup文件报错求助
解决pg_restore提示“input file does not appear to be a valid archive”的问题
根据你描述的环境(Windows Server 2012R2 + PostgreSQL 9.5)和遇到的报错,我来梳理几个最可能的原因和对应的解决办法:
1. 备份文件本身损坏或不完整
这是最常见的诱因,比如备份过程中意外中断、文件拷贝时出错(网络传输丢包、磁盘写入故障)都会导致归档文件失效。
- 验证方法:尝试用
pg_restore列出备份内容,看是否能正常识别:
如果同样弹出无效归档的报错,说明文件大概率已经损坏。pg_restore --list "D:\BackupFull.backup" - 解决办法:
- 重新从源数据库生成一份备份,确保备份全程无中断、无报错;
- 对比备份文件的大小和原备份的大小,或者用MD5哈希校验工具确认文件完整性。
2. pg_restore与备份文件的版本不兼容
PostgreSQL的自定义归档格式(-Fc)在不同大版本之间可能存在兼容性差异,如果这份.backup文件是从更高版本的PostgreSQL(比如10及以上)导出的,9.5版本的pg_restore无法识别新的格式规范。
- 验证方法:执行
pg_restore -v "D:\BackupFull.backup",报错信息可能会明确提到版本不匹配; - 解决办法:
- 找到生成这份备份时使用的PostgreSQL版本对应的
pg_restore工具来恢复; - 或者升级本地的PostgreSQL到与备份源一致的版本后再尝试恢复。
- 找到生成这份备份时使用的PostgreSQL版本对应的
3. 恢复命令的格式参数错误
你用了-F c指定自定义格式,但如果备份文件实际是SQL脚本格式(虽然pgAdmin3默认生成自定义格式,但不排除操作时选错了备份类型),就会触发这个报错。
- 验证方法:用记事本打开备份文件开头,如果看到
CREATE DATABASE之类的SQL语句,说明是纯SQL格式; - 解决办法:
- 如果是SQL格式,改用
psql恢复:psql -d newDB -h HOSTNAME -U someuser -f "D:\BackupFull.backup" - 如果确实是自定义格式,尝试去掉
-F c参数,让pg_restore自动检测格式:pg_restore -d newDB -h HOSTNAME -U someuser -v "D:\BackupFull.backup"
- 如果是SQL格式,改用
4. 文件路径或权限问题
Windows下的路径如果包含特殊字符、过长路径(虽然你加了引号,但偶尔也会有异常),或者运行pg_restore的用户没有读取备份文件的权限,也可能导致工具无法正确识别文件。
- 解决办法:
- 把备份文件移动到简单路径下(比如
D:\backup\full.backup),避免特殊字符和层级过多的路径; - 右键备份文件→属性→安全,确保当前用户(或PostgreSQL服务运行的用户)拥有读取权限。
- 把备份文件移动到简单路径下(比如
内容的提问来源于stack exchange,提问作者Jonathan L
相关产品推荐
相关产品推荐

