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

使用FIFO文件实现pg_dump直连pg_restore的PostgreSQL迁移可行性问询

PostgreSQL无中间文件全库迁移方案

完全可以通过管道(含FIFO命名管道)直接将pg_dump的自定义格式输出定向到pg_restore,不需要生成中间dump文件,完美支持全库迁移场景,还能重叠导出、传输的耗时,总耗时可从原流程的9小时20分钟压缩到6小时左右。


具体实现方式

跨服务器迁移(适配你的场景)

你之前用到的FIFO逻辑可以直接优化,不需要落地dump文件,推荐两种可直接用的方案:

  1. SSH隐式管道方案(无需手动创建FIFO,操作最简单)
    直接在新服务器上执行单条命令即可完成全流程:
ssh 旧服务器IP "pg_dump -Fc -U 旧库账号 旧库名" | pg_restore -U 新库账号 -d 新库名
  1. 显式FIFO方案(适合需要单独监控传输、导出进度的场景)
  • 在新服务器上创建FIFO文件:mkfifo /tmp/pg_transfer.fifo
  • 新服务器后台启动pg_restore从FIFO读取数据:pg_restore -U 新库账号 -d 新库名 < /tmp/pg_transfer.fifo &
  • 新服务器同时执行SSH拉取旧库导出结果写入FIFO:ssh 旧服务器IP "pg_dump -Fc -U 旧库账号 旧库名" > /tmp/pg_transfer.fifo

同机多实例迁移(如果是同一设备上的实例迁移用)

直接用本地管道即可,操作更简便:

pg_dump -Fc -U 账号 源库名 | pg_restore -U 账号 -d 目标库名

注意事项&优化建议

  • 提前配置好新旧服务器的SSH免密登录、PostgreSQL的.pgpass免密认证,避免命令执行过程中断需要输入密码
  • 给pg_restore加-j 并发数参数,按新服务器CPU核心数设置(比如8核服务器可以设为-j 6),导入速度最高可提升70%,进一步压缩总耗时
  • 你之前测试SQL格式+psql导入不适配全库的原因是:纯SQL格式不支持并行恢复,大库导出的纯SQL体积大、处理效率低,换成-Fc自定义格式对接pg_restore后不存在这个问题,完全支持全库的表、索引、约束、权限、插件等所有对象的迁移

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 08:27:00