pg_restore 是什么
pg_restore 用来恢复自定义与目录格式的逻辑备份,支持并行导入、按对象筛选以及遇错策略控制;纯文本 SQL 备份则直接用 psql 回放。它可以只恢复某张表或某个模式,这让误操作后的局部修复不必付出整库恢复的代价。
基本信息
| 适用格式 | 自定义、目录与 tar 三种归档格式 |
|---|---|
| 并行恢复 | 目录格式配合并行参数使用 |
| 对象筛选 | 按表、按模式或按清单文件选择 |
| 错误策略 | 默认继续并在末尾汇总报错,可改为遇错即停 |
恢复示例
恢复示例
# custom:全量恢复,先清空同名对象
pg_restore -d appdb --clean --if-exists /backup/appdb.dump
# directory:可并行恢复
pg_restore -d appdb -j 4 /backup/appdb.dir
# 只恢复某张表
pg_restore -d appdb -t orders /backup/appdb.dump
# plain 格式直接回放
psql -d appdb -f /backup/appdb.sql常用选项
| 选项 | 作用 |
|---|---|
| 列出清单 | 查看归档内包含的对象列表 |
| 按表或模式 | 只恢复指定对象,适合局部修复 |
| 遇错即停 | 出现错误立即退出,避免得到部分恢复的库 |
| 清理与判断存在 | 先删除再重建对象,配合存在性判断使用 |
| 并行度 | 与目录格式配合,缩短大库导入时间 |
使用要点
- 恢复到新库再切换:直接对生产库执行清理重建风险高,留出比对与回退空间
- 先看对象清单:恢复前确认归档里有哪些表与模式,避免遗漏依赖对象
- 角色与权限要预置:单库归档不含全局角色信息,目标实例需提前具备
- 遇到报错先看是否可忽略:版本差异导致的对象不存在类报错,与数据错误要区别对待
- 恢复后做统计与抽检:行数、索引与业务数据一致性都要核对
清理选项会先删除再重建对象;正式库执行前确认目标库,更稳妥的做法是恢复到新库、比对无误后再切换。
恢复前的准备清单
- 确认归档格式与版本兼容:跨大版本恢复通常需要先用文本格式过渡
- 确认目标库的字符集与排序规则与源一致
- 预置角色与扩展:单库归档不包含全局对象与第三方扩展
- 准备足够的临时空间与连接数,并行恢复对资源占用更高