在 CentOS 上使用 pgAdmin 恢复数据的实用步骤
一 恢复方式与准备
- 确认备份类型:
- 纯文本 SQL 脚本(.sql):由 pg_dump 生成,适合跨版本迁移与逻辑恢复。
- 自定义归档(.backup/.dump):由 pg_dump 的 -Fc 生成,适合选择性恢复与保留对象定义。
- 物理备份:由 pg_basebackup 生成,用于整库级恢复,通常不在 pgAdmin 中直接“Restore”。
- 准备目标库:
- 恢复为全新库时,先在 pgAdmin 中新建一个空库(字符集与排序规则与原库一致)。
- 恢复单表/模式时,确保目标库已存在且对象不存在冲突。
- 权限与连接:
- 用于恢复的数据库用户需具备相应的 CREATE/INSERT/USAGE 等权限。
- 在 pgAdmin > Servers 中确认能正常连接目标实例。
二 使用 pgAdmin 图形界面恢复
- 打开左侧树,定位到目标数据库(或要恢复到的数据库),右键选择 Restore…。
- General 页:
- 选择备份文件(.sql 或 .backup/.dump),设置 Format 与 Filename。
- Data/Objects 页:
- 勾选需要恢复的对象范围(如仅数据、仅 DDL、包含/排除特定对象)。
- Options 页:
- 常用选项包括:遇到错误是否继续、是否包含 OID、是否执行 DROP 语句等(不同版本选项名称略有差异)。
- 点击 Restore 开始恢复,完成后在右下角查看结果提示。
- 恢复完成后,建议执行:
- 对 .sql 脚本:在目标库执行
ANALYZE; 更新统计信息。
- 对 .backup/.dump:在目标库执行
SELECT pg_restore_check('your_backup_file.backup'); 校验归档一致性(可选)。
三 命令行恢复方式(当备份较大或界面受限时)
- 纯文本 SQL 脚本(.sql)
- 恢复命令:
psql -h <主机> -U <用户> -d <目标库> -f <file.sql>
- 示例:
psql -h 127.0.0.1 -U postgres -d mydb -f /backups/mydb.sql
- 自定义归档(.backup/.dump,使用 pg_restore)
- 连接到目标库后恢复:
pg_restore -h <主机> -U <用户> -d <目标库> <file.backup>
- 直接创建新库并恢复:
pg_restore -h <主机> -U <用户> -C -d postgres <file.backup>(-C 会自动创建数据库)
- 常用参数:
-j <N> 并行恢复(加速大库)
-c 先 DROP 再创建对象(谨慎使用)
-n <schema> 仅恢复指定模式
-t <table> 仅恢复指定表
- 物理备份(pg_basebackup 产出)
- 适用于整库恢复:停止数据库,清空/替换 $PGDATA,将备份内容拷回,配置 recovery.conf/pg_recovery.conf(或等效恢复配置),再以恢复模式启动。
四 常见问题与排错要点
- 权限不足:确保恢复用户具备目标库的 CREATE/INSERT/USAGE 等权限;必要时以 postgres 超级用户执行。
- 编码/区域不匹配:创建目标库时显式指定与原库一致的 ENCODING 与 LC_COLLATE/LC_CTYPE。
- 对象已存在冲突:在 Restore 的 Options 中启用“先 DROP 再创建”(如有),或先手动清理冲突对象。
- 大对象/角色未恢复:
- 角色与表空间需单独处理(SQL 脚本中通常不含角色定义,可用
pg_dumpall -r 导出角色并在目标库执行)。
- 大对象(Large Object)需使用 -b 选项配合 pg_restore。
- 恢复中断或失败:检查磁盘空间、会话超时、WAL 配置与网络稳定性;必要时拆分脚本或降低并发。
- 版本兼容:跨大版本恢复时优先使用 pg_dump/pg_restore 的逻辑方式,避免直接物理恢复。