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四种格式对比
| 格式 | 恢复方式 | 特点 |
|---|---|---|
| plain | psql 直接回放 | 可读可改,不能选择性恢复 |
| custom | pg_restore | 可按表筛选、可并行 |
| directory | pg_restore | 支持并行导出与导入,目录形式 |
| tar | pg_restore | 单文件归档,便于传输 |
典型使用场景
- 单库日常备份:中小库每天导出,产物便于跨版本迁移
- 按表恢复:custom 格式配合 pg_restore -t 只恢复受影响的数据表
- 大库迁移:directory 格式加并行参数显著缩短导出与导入时间
- 结构版本管理:用 -s 只导出结构,纳入版本控制做变更对比
- 跨环境复制:把生产数据裁剪后导入测试环境,避免直接拷贝数据目录
全局对象不在单库备份范围内:角色、表空间与权限需要在目标实例预先准备,或用 pg_dumpall 单独备份全局部分。
选择格式的判断依据
- 需要在恢复时跳过某些表或只恢复部分对象,选 custom 或 directory
- 数据量大且恢复时间敏感,选 directory 配合 -j 并行
- 产物需要人工查看或纳入版本控制,选 plain
- 需要单文件便于搬运与归档,选 tar 格式
- 只在同一大版本之间迁移,directory 与 custom 都能平滑应对
备份账号需要读取全部表与序列的权限;权限不足时可能只拿到部分表而退出码仍为成功,脚本应核对产物中的表数量。