You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 10降级至9.5时pg_restore出现段错误问题求助

问题排查与解决

核心问题:错误处理二进制备份格式

你用pg_dump -Fc生成的是PostgreSQL自定义二进制备份格式,这种格式并非纯文本SQL,直接用cat+sed这类文本处理工具操作会彻底破坏二进制结构,导致pg_restore解析时触发段错误。

正确的跨版本降级备份&恢复流程

1. 重新生成兼容PG9.5的纯SQL备份

在PG10服务器上,导出纯文本格式备份,并指定目标兼容版本为9.5:

pg_dump -Z1 -Fp --no-owner --no-privileges --target-version=9.5 <db_name> | ssh <user>@s<server> "dd of=dump.sql"
  • -Fp:生成纯文本SQL格式,支持后续文本编辑
  • --target-version=9.5:让pg_dump自动生成适配PG9.5的语法
  • --no-owner/--no-privileges:避免恢复时因权限、用户不存在报错

2. 针对性处理兼容性语法(若需)

如果导出的SQL仍包含PG9.5不支持的语法(比如PG10新增的GENERATED AS IDENTITY),可以用sed精准替换:

sed -e 's/GENERATED ALWAYS AS IDENTITY//g' -e '/AS integer/d' dump.sql > downgraded_dump.sql

注意:不要盲目删除所有AS integer,只处理和IDENTITY相关的定义即可。

3. 恢复到PG9.5

纯文本SQL备份直接用psql执行更高效:

psql -d <db> -f downgraded_dump.sql

如果坚持用pg_restore,需确保备份是对应格式,纯文本格式也支持,但psql是更直接的选择。

额外排查点

  • 检查PG9.5的pg_restore完整性:执行pg_restore --version,确认程序未损坏
  • 验证备份文件完整性:对比原服务器和目标服务器上备份文件的MD5值,确认传输过程无损坏

内容的提问来源于stack exchange,提问作者fueggit

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 08:08:17