PostgreSQL pg_dumpall 全局备份
实例级导出工具:依次连接每个库导出内容,并在导出流开头写入角色、表空间这类全局对象,因此单个库的 pg_dump 文件里没有的那部分信息由它补齐。实践中常见的组合是把全局对象与逐库导出分开做,恢复时先建角色与权限,再恢复各库数据,否则会出现对象属主不存在的报错。
基本信息
| 适用平台 | PostgreSQL(版本与客户端版本建议匹配) |
|---|---|
| 权限要求 | 需要能读取所有目标库的账号,通常是超级用户 |
| 产物形式 | 纯 SQL 文本,可直接查看与编辑 |
| 效率特点 | 串行逐库导出,大实例速度明显慢于并行方案 |
典型使用场景
- 实例迁移:把整套库连同角色一起搬到新实例
- 权限留档:单独导出角色与权限配置,作为配置备份
- 小实例日常备份:库数量不多时最简单的一把梭方案
- 验收核对的参照:用纯 SQL 产物人工检查对象定义
- 跨版本升级的辅助手段:小库用逻辑导出与导入完成升级
用法
用法
# 仅导出全局对象(角色、表空间等),很轻量,建议每日执行
pg_dumpall -U postgres --globals-only > /backup/pg/globals-2026-10-12.sql
# 全实例导出(含所有库的数据与全局对象)
pg_dumpall -U postgres > /backup/pg/all-$(date +%F).sql
# 恢复:先建角色与权限,再恢复数据
psql -U postgres -f /backup/pg/globals-2026-10-12.sql
psql -U postgres -f /backup/pg/all-2026-10-12.sql
# 校验产物是否包含关键全局语句
grep -c 'CREATE ROLE' /backup/pg/globals-2026-10-12.sql用法对比
| 方式 | 覆盖范围 | 适用场景 |
|---|---|---|
| --globals-only | 角色、表空间等全局对象 | 与逐库 pg_dump 组合使用 |
| 全实例导出 | 所有库内容加全局对象 | 小实例、整体迁移 |
| pg_dump 单库 | 单个库的对象与数据 | 大实例并行备份的主力 |
| pg_dump -Fc 自定义格式 | 单库,压缩且可并行恢复 | 需要灵活恢复单表时首选 |
恢复顺序是先全局对象后数据:globals 里包含角色与权限,缺少它会出现对象属主角色不存在的异常。产物里含角色口令哈希,文件权限与流转要按敏感文件管理。
大实例建议用 pg_dump --format=custom 配合 -j 并行恢复,或使用 PostgreSQL 17 起提供的并行导出能力,pg_dumpall 本身是串行的。