解决 pg_restore 提示“在文件头中没有找到魔术字串” …
我备份时使用了:.\pg_dump -U postgres -d GMP --encoding=UTF8 -f d:\gmp_backup_01.sql
恢复时使用: .\psql -h localhost -U postgres -d gmp -f d:\gmp_backup_01.sql
如果使用:pg_restore -h localhost -p 5432 -U postgres -d gmp -Fc "d:\gmp_backup_01.sql",会报错,提示标题的错误;
当使用 pg_restore 恢复 PostgreSQL 备份时,如果出现 在文件头中没有找到魔术字串,通常意味着备份文件格式与命令参数不匹配,或者使用了错误的工具版本。
示例:
这里的问题是 backup.sql 是纯文本 SQL 文件,而 -Fc 表示自定义格式,导致 pg_restore 无法识别文件头。
要解决此问题,首先确认备份文件的生成方式。若是通过 pg_dump -Fc 生成的自定义格式文件,应保留 .dump 或 .backup 扩展,并用 pg_restore 恢复:
如果备份是通过 pg_dump 默认或 -Fp 生成的纯 SQL 文件,则应使用 psql 而不是 pg_restore:
另一个常见原因是 pg_dump 与 pg_restore 版本不一致。高版本 pg_dump 生成的文件可能无法被低版本 pg_restore 识别,会提示文件头不支持或找不到魔术字串。此时应:
或者升级 PostgreSQL 到相同或更高版本,再执行恢复。
为避免跨版本兼容性问题,可在导出时使用纯 SQL 格式:
这样可直接用 psql 在不同版本间恢复,减少格式不兼容风险。 通过确认文件格式、匹配工具版本,即可有效解决该错误。

浙公网安备 33010602011771号