健康一贴灵,专注医药行业管理信息化

解决 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 备份时,如果出现 在文件头中没有找到魔术字串,通常意味着备份文件格式与命令参数不匹配,或者使用了错误的工具版本。

示例:

pg_restore -v --no-owner -h myhost -U myuser -Fc -j 4 -d mydb backup.sql
pg_restore: 错误: 在文件头中没有找到魔术字串

这里的问题是 backup.sql 是纯文本 SQL 文件,而 -Fc 表示自定义格式,导致 pg_restore 无法识别文件头。

要解决此问题,首先确认备份文件的生成方式。若是通过 pg_dump -Fc 生成的自定义格式文件,应保留 .dump 或 .backup 扩展,并用 pg_restore 恢复:

pg_restore -v --no-owner -h myhost -U myuser -d mydb backup.dump

如果备份是通过 pg_dump 默认或 -Fp 生成的纯 SQL 文件,则应使用 psql 而不是 pg_restore:

psql -h myhost -U myuser -d mydb -f backup.sql

另一个常见原因是 pg_dump 与 pg_restore 版本不一致。高版本 pg_dump 生成的文件可能无法被低版本 pg_restore 识别,会提示文件头不支持或找不到魔术字串。此时应:

# 使用与备份生成版本一致的 pg_restore
/path/to/correct_version/pg_restore -d mydb backup.dump

或者升级 PostgreSQL 到相同或更高版本,再执行恢复。

为避免跨版本兼容性问题,可在导出时使用纯 SQL 格式:

pg_dump -Fp -f backup.sql -U postgres dbname

这样可直接用 psql 在不同版本间恢复,减少格式不兼容风险。 通过确认文件格式、匹配工具版本,即可有效解决该错误。

posted @ 2026-01-07 09:19  一贴灵  阅读(3)  评论(0)    收藏  举报
学以致用,效率第一