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

Google Cloud SQL导出pg_dump自定义格式文件pg_restore报块类型151错误问询

问题原因

这个报错本质是pg_restore无法识别自定义归档备份文件中的特殊数据块,几乎都是由以下两种情况导致:

  1. 版本不兼容:Google Cloud SQL运行的PostgreSQL版本、导出时使用的pg_dump版本、本地用于导入的pg_restore版本三者不匹配,尤其是当Cloud SQL版本高于本地pg_restore版本时,高版本PG新增的压缩块、特殊对象块无法被低版本工具识别
  2. 备份文件包含Google Cloud SQL自定义的内部系统对象,标准PostgreSQL的pg_restore无法解析这类专有对象的块格式

解决方案

按优先级依次尝试以下操作:

  • 首先对齐三者版本:确认Cloud SQL上PostgreSQL的大版本号,本地安装完全相同大版本的PostgreSQL客户端工具(包含pg_dump和pg_restore),重新执行导出操作后再尝试导入。比如Cloud SQL用的是PostgreSQL 15,本地也必须用15.x版本的pg_restore,不能用14及更低版本
  • 如果版本对齐后仍报错,导出时指定传统gzip压缩算法,避免高版本默认的新压缩格式无法识别,调整后的导出命令如下:
pg_dump --format=c --no-owner --no-acl --compress=gzip:6 --file="~/projects/project/backups/project-custom.sqlc" --dbname=project --schema='public' --exclude-schema='cloudsql%'

新增的两个参数作用:--compress=gzip:6指定使用通用的gzip压缩,--exclude-schema='cloudsql%'排除Google Cloud SQL自带的内部系统schema,避免导出专有对象

  • 导入前先校验备份文件完整性,执行以下命令如果能正常列出备份中的所有对象,说明文件没有损坏:
pg_restore --list ~/projects/project/backups/project-custom.sqlc

如果执行该命令就抛出相同报错,说明备份文件本身有问题,建议更换网络环境重新导出,避免网络传输过程中文件被截断或损坏

  • 如果以上操作都无效,可以使用自定义格式的拆分导出方案,单独导出表结构和数据,体积和普通自定义归档基本一致:先导出结构pg_dump --format=c --schema-only ...,再单独导出数据pg_dump --format=c --data-only ...,分开导入即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:27:04