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

升级到Postgres 14后使用heroku pg:pull无法拉取最新生产数据如何解决

问题核心原因

Postgres 14本身没有会导致跨版本拉取远端数据缺失的新增默认配置项,该问题本质是heroku pg:pull底层依赖的pg_dump/pg_restore工具的跨版本兼容问题,或本地PG14的默认校验规则导致新数据写入静默失败。

排查解决步骤

  • 先验证导出备份本身是否包含新数据,排除heroku封装命令的问题。手动执行pg_dump导出全量备份:
    pg_dump --no-owner --no-privileges <Heroku数据库连接URL> > full_dump.sql
    
    打开导出的sql文件搜索10月10日之后的业务数据关键字,确认备份本身是否包含新数据。如果备份无新数据,说明是PG14的pg_dump对PG13的兼容问题,安装PG13版本的客户端工具后指定版本执行pull即可:
    Ubuntu下安装PG13客户端:
    sudo apt install postgresql-client-13
    
    执行指定版本的pull命令:
    PATH=/usr/lib/postgresql/13/bin:$PATH heroku pg:pull <HEROKU_POSTGRESQL_ADDON_NAME> <本地数据库名>
    
  • 如果手动导出的备份包含新数据,说明是本地恢复环节出问题。执行带详细日志的恢复命令查看错误:
    pg_restore --verbose --no-owner --no-privileges -d <本地数据库名> full_dump.sql
    
    大概率是PG14默认开启的函数体校验、更严格的外键约束规则导致部分新数据写入被拦截,临时关闭校验后再恢复即可:
    psql -d <本地数据库名> -c "SET check_function_bodies = off;"
    
  • 如果上述步骤未解决,开启本地PG14的全量日志定位问题:修改/etc/postgresql/14/main/postgresql.conf中log_statement = 'all',重启PG服务sudo systemctl restart postgresql@14-main.service,重新执行pg:pull后查看/var/log/postgresql/postgresql-14-main.log中的报错信息定位具体问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 11:06:06