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

使用pg_restore向Heroku恢复1.1GB数据库时遇PQputCopyData连接错误

解决Heroku PostgreSQL恢复大dump文件时连接中断的问题

问题核心

1.1GB的本地PostgreSQL dump文件恢复到Heroku时,执行pg_restore命令后网络变慢,数分钟后触发连接意外关闭错误,且始终卡在public.stock_app_stock表,调整命令或dump生成配置均无效。本质是大表批量导入触发Heroku PostgreSQL连接超时,或是网络传输数据量过大导致中断。

可行解决方法

1. 分表拆分恢复

针对卡住的大表单独处理,拆分恢复流程:

  • 单独导出public.stock_app_stock表:
    pg_dump -t public.stock_app_stock -F c -f stock_table.dump 你的本地数据库名
    
  • 先恢复其他所有表(排除大表):
    pg_restore --verbose --clean --no-acl --no-owner -h heroku-host -U db-heroku-username -d db-name --exclude-table=public.stock_app_stock dumpfile
    
  • 最后单独恢复大表,添加--batch参数分批次提交数据,避免长时间连接:
    pg_restore --verbose --no-acl --no-owner --batch -h heroku-host -U db-heroku-username -d db-name stock_table.dump
    

2. 压缩dump减少传输量

未压缩的1.1GB文件传输耗时过长,容易触发超时,先压缩再传输:

  • 生成压缩dump:
    pg_dump -F c 你的本地数据库名 | gzip > dumpfile.gz
    
  • 恢复时直接解压流式传输:
    gunzip -c dumpfile.gz | pg_restore --verbose --clean --no-acl --no-owner -h heroku-host -U db-heroku-username -d db-name
    

3. 调整pg_restore参数优化连接

延长连接超时时间,跳过不必要的磁盘同步步骤:

pg_restore --verbose --clean --no-acl --no-owner --connect-timeout=300 --no-sync -h heroku-host -U db-heroku-username -d db-name dumpfile

4. 使用Heroku官方导入工具

Heroku的pg:backups:restore专门优化了大文件导入,自动处理分片和超时问题:

  • 将dump文件上传至临时可访问地址(如本地用ngrok暴露,或S3临时链接),然后执行:
    heroku pg:backups:restore '你的dump文件访问链接' DATABASE_URL --app 你的Heroku应用名
    

5. 检查Heroku数据库资源限制

若使用免费/入门级数据库实例,可能因内存、连接数或磁盘限制无法处理大表导入,可临时升级实例规格,恢复完成后再降级。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:39:36