首页/数据/备份与容灾速查/PostgreSQL pg_dump 逻辑备份
数据库与云备份56 条

PostgreSQL pg_dump 逻辑备份

PostgreSQL 单库逻辑备份主工具:支持 plain / custom / directory / tar 四种格式,custom 与 directory 格式配合 pg_restore 可选择性恢复。

备份与容灾速查数据更新于 2026-10-13

pg_dump 是什么

pg_dump 是 PostgreSQL 的单库逻辑备份工具,把结构与数据导出为 SQL 或自定义归档。它支持四种输出格式:plain 是纯 SQL 文本,custom 与 directory 是带目录清单的归档、可由 pg_restore 选择性恢复,tar 格式则是便于管道处理的归档。

基本信息

备份范围单个数据库,不含角色、表空间等全局对象
连接方式本机默认 peer,远程用 -h、-p、-U
并行能力-j 必须与 directory 格式配合
一致性默认在可串行化快照中读取,不会阻塞其他会话的读写

四种格式

四种格式
pg_dump -Fp -f /backup/appdb.sql appdb          # plain:纯 SQL 文本
pg_dump -Fc -f /backup/appdb.dump appdb         # custom:可选择对象恢复
pg_dump -Fd -j 4 -f /backup/appdb.dir appdb     # directory:支持并行导出
pg_dump -Ft -f /backup/appdb.tar appdb          # tar:便于管道与归档处理
# 结构与数据分离
pg_dump -s -f /backup/appdb-schema.sql appdb

四种格式对比

格式恢复方式特点
plainpsql 直接回放可读可改,不能选择性恢复
custompg_restore可按表筛选、可并行
directorypg_restore支持并行导出与导入,目录形式
tarpg_restore单文件归档,便于传输

典型使用场景

  • 单库日常备份:中小库每天导出,产物便于跨版本迁移
  • 按表恢复:custom 格式配合 pg_restore -t 只恢复受影响的数据表
  • 大库迁移:directory 格式加并行参数显著缩短导出与导入时间
  • 结构版本管理:用 -s 只导出结构,纳入版本控制做变更对比
  • 跨环境复制:把生产数据裁剪后导入测试环境,避免直接拷贝数据目录
全局对象不在单库备份范围内:角色、表空间与权限需要在目标实例预先准备,或用 pg_dumpall 单独备份全局部分。

选择格式的判断依据

  • 需要在恢复时跳过某些表或只恢复部分对象,选 custom 或 directory
  • 数据量大且恢复时间敏感,选 directory 配合 -j 并行
  • 产物需要人工查看或纳入版本控制,选 plain
  • 需要单文件便于搬运与归档,选 tar 格式
  • 只在同一大版本之间迁移,directory 与 custom 都能平滑应对
备份账号需要读取全部表与序列的权限;权限不足时可能只拿到部分表而退出码仍为成功,脚本应核对产物中的表数量。

易错点

  • plain 格式恢复只能整体回放、无法跳过对象;custom 格式必须用 pg_restore 而不是 psql
  • 备份期间尽量避免 DDL 变更与结构迁移,大变更与备份窗口错开
  • 大库用默认单线程导出与导入耗时过长,应改用 directory 格式配合并行参数
  • 目标实例缺少源库依赖的角色或扩展时恢复中途报错,需提前核对

数据来源与参考

  • PostgreSQL 文档(pg_dump)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌