PostgreSQL怎么使用pg_restore多进程并行极速恢复数据

星瑶同学_3201

星瑶同学_3201

2026-11-01

523人浏览

原创

pg_restore的-j参数仅对-Fd和-Fc格式备份有效,因其将对象拆分为独立文件或归档条目以支持并发调度;-Fp为单SQL文件,无法并行。

postgresql怎么使用pg_restore多进程并行极速恢复数据

pg_restore 支持并行恢复,但不是所有场景都能开多线程——它只对 -Fd(目录格式)和 -Fc(自定义格式)备份有效,且必须配合 -j 参数;用 -Fp(纯 SQL)时加 -j 会被忽略,还可能报错。

为什么 -j 只在 -Fd / -Fc 下生效

因为只有这两种格式把表、索引、函数等对象拆成独立文件或归档条目,pg_restore 才能真正并发调度。而 -Fp 是单一大 SQL 文件,顺序执行 INSERT / CREATE 语句,没法拆分任务。

  • 你用 pg_dump -Fc mydb > backup.dump 或 pg_dump -Fd mydb -f backup_dir 生成的备份,才具备并行基础
  • 如果误用 pg_dump -Fp mydb > backup.sql,后续无论加不加 -j 4,都只会单线程执行
  • 检查备份类型:运行 pg_restore -l backup.dump | head -5,能看到 TOC 表;而 head backup.sql 显示的是 SQL 语句

实际并行恢复命令怎么写

核心是三要素:格式匹配 + 并发数合理 + 连接资源到位。下面是最常用安全写法:

Yoroll
Yoroll

一款AI视频创作工具,主要用于一站式AI互动视频游戏创作平台,适合需要提升相关任务效率的用户。

下载
pg_restore -h localhost -p 5777 -U pguser -d targetdb -j 4 -v backup_dir/
  • -j 4 表示启用 4 个并行 job,建议 ≤ 服务器 vCPU 数(如 8 核机器最多设 -j 8)
  • 必须用目录路径(backup_dir/)或 .dump 文件(backup.dump),不能是 .sql
  • -v 建议加上,方便看到哪个对象卡住或失败
  • 如果目标库已存在且要清空重来,加 -c(drop 再建),但注意它不加 IF EXISTS,若对象不存在会报错;可补 --if-exists

容易被忽略的性能瓶颈和坑

并行数设高 ≠ 恢复更快,反而可能因资源争抢拖慢整体速度。真实瓶颈常在以下几处:

  • 数据库连接数不够:-j 4 实际需要至少 5 个连接(1 主控 + 4 worker),检查 max_connections 是否 ≥ j + 1,否则进程会卡在“waiting for connection”
  • 磁盘 I/O 吃紧:SSD 上 -j 4~6 通常最优;机械盘上 -j 2 可能比 -j 4 更快,因寻道延迟翻倍
  • shared_buffers 和 maintenance_work_mem 太小:恢复过程大量用到排序和哈希,maintenance_work_mem 建议设为 512MB~2GB(根据内存总量按 10%~25% 配)
  • 没关 fsync:临时恢复库可加 -o "fsync=off"(即 pg_restore --no-sync),但仅限可信环境;生产恢复后务必手动 pg_switch_wal() 并验证

最后提醒一句:并行恢复不会自动处理依赖顺序(比如外键、物化视图刷新),如果备份里有复杂依赖,-j 越大越容易遇到 ERROR: insert or update on table "xxx" violates foreign key constraint。这时得先用 -s 导出结构,手工删掉约束,恢复完再加回去。

相关文章

数据恢复工具app
数据恢复工具app

手机里的数据丢失了怎么办?聊天记录不小心删掉了怎么办?不用担心,这里为大家提供了数据恢复工具app下载,安全正规,有需要的小伙伴保存下载,就轻松恢复数据啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
postgresql常用命令
postgresql常用命令

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、\l、\c、\dt、\d table_name、\du、\i file_name、\e和\q等。本专题为大家提供postgresql相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.10

233

5

常用的数据库软件
常用的数据库软件

常用的数据库软件有MySQL、Oracle、SQL Server、PostgreSQL、MongoDB、Redis、Cassandra、Hadoop、Spark和Amazon DynamoDB。更多关于数据库软件的内容详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.02

4749

19

postgresql常用命令有哪些
postgresql常用命令有哪些

postgresql常用命令psql、createdb、dropdb、createuser、dropuser、\l、\c、\dt、\d table_name、\du、\i file_name、\e和\q等。更详细的postgresql常用命令,大家可以访问下面的文章。

2023.11.16

647

3

postgresql常用命令介绍
postgresql常用命令介绍

postgresql常用命令有\l、\d、\d5、\di、\ds、\dv、\df、\dn、\db、\dg、\dp、\c、\pset、show search_path、ALTER TABLE、INSERT INTO、UPDATE、DELETE FROM、SELECT等。想了解更多postgresql的相关内容,可以阅读本专题下面的文章。

2023.11.20

1396

6

PostgreSQL性能优化与索引调优实战
PostgreSQL性能优化与索引调优实战

本专题面向后端开发与数据库工程师,深入讲解 PostgreSQL 查询优化原理与索引机制。内容包括执行计划分析、常见索引类型对比、慢查询优化策略、事务隔离级别以及高并发场景下的性能调优技巧。通过实战案例解析,帮助开发者提升数据库响应速度与系统稳定性。

2026.02.12

480

19

PostgreSQL 性能优化与查询执行计划实战
PostgreSQL 性能优化与查询执行计划实战

本专题深入解析PostgreSQL性能优化核心,聚焦查询执行计划的实战应用。通过EXPLAIN命令精准定位瓶颈,结合索引策略、SQL改写与参数调优,系统提升查询效率。从执行计划解读到性能调优全流程,助你掌握数据库性能诊断与优化实战能力。

2026.05.08

150

10

PostgreSQL 在 Next.js / Go 全栈架构中的工程化实践
PostgreSQL 在 Next.js / Go 全栈架构中的工程化实践

本文详解如何利用Next.js(搭配Drizzle ORM)与Go后端构建高性能应用,充分发挥PG在JSONB非结构化存储与pgvector向量检索上的优势。从数据建模到Docker容器化部署,打造支持AI时代的“One Database”工程化解决方案。

2026.05.08

901

10

PostgreSQL高级特性、内核机制与现代数据架构
PostgreSQL高级特性、内核机制与现代数据架构

本专题从MVCC并发控制与WAL日志等内核机制出发,详解JSONB、PostGIS及pgvector等高级特性。探讨如何利用单一引擎支撑关系型、向量及图数据等现代数据架构需求,助您掌握构建高并发、智能化应用的核心技术。

2026.05.08

244

10

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.7万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 134.1万人学习