PostgreSQL pg_dump 怎么恢复?格式、角色与错误中止

拿到 PostgreSQL 备份后,第一步是确认它由什么工具、以什么格式生成,以及准备恢复到哪里。后缀名不能完全代表格式,重命名也不会改变文件内容。本文以 PostgreSQL 16 的逻辑备份为例,恢复操作只针对已确认的独立测试目标。

记录版本和备份范围

核对源服务器、导出客户端和目标服务器的版本,确认目标所需扩展、字符集及运行环境。不要用旧客户端直接读取更高版本服务器,再把失败当作权限问题。跨版本恢复应先做兼容性演练,而不是仅依据 SQL 看起来通用。

pg_dump 主要针对单个数据库,集群级角色等对象需要另外安排。备份中有表和数据,不表示相关登录身份、外部文件和全部应用配置都已包含。pg_dump 官方文档

根据格式选择恢复工具

自定义格式可以由 pg_restore 读取,例如备份时使用 pg_dump -Fc。恢复前可先查看目录清单:

pg_restore --list /srv/backups/site.dump

这个步骤有助于确认对象范围,但不能证明数据已经完整或一定可恢复。普通文本 SQL 则应由 psql 执行,不能把它强行交给 pg_restore。只恢复可信来源的备份,因为其中的定义和语句可能执行具有实际影响的操作。

备份文件、角色口令和连接配置需要限制访问,不应放入网站目录。准备恢复目标前确认剩余空间,逻辑备份压缩后的体积并不等于恢复完成所需的存储。

在空目标中明确所有者策略

假设已经按正确编码与模板准备好空测试库 site_restore,并希望由受控恢复账号持有对象、不沿用旧权限,可以采用如下演练形式:

pg_restore --exit-on-error --no-owner --no-acl --dbname=site_restore /srv/backups/site.dump

--no-owner--no-acl 是本次测试的显式选择,不代表正式恢复应一律丢弃原所有者与授权。需要保留原权限时,应先创建必要角色并检查角色映射;扩展或特殊对象还可能需要额外权限。pg_restore 文档

不要添加清理旧对象的选项后直接对生产库运行。目标名称、连接主机和当前身份都要再次核对,尤其是在管理员电脑保存了多个连接环境时。

错误中止不等于全部自动回滚

--exit-on-error 会在遇到错误时停止继续恢复,但之前已经提交的对象可能仍在。除非采用并满足单事务恢复条件,不能假定一次失败后目标自动回到空库状态。

恢复大数据库时,并行度、单事务方式和锁资源之间有取舍,应先在相近规模环境测量。不要为了提速随意跳过约束、索引或权限错误,否则会得到看似能查询但结构不完整的数据库。

文本 SQL 恢复同样要明确遇错中止,并检查退出状态。失败后保留日志和目标状态,重新准备清楚的测试目标或按验证过的计划处理,不能反复向同一个半成品库叠加恢复。

用业务验证恢复结果

检查对象、关键数据、索引、约束、序列及角色访问,再运行必要的统计信息更新和应用测试。行数相近只说明部分数据存在,不能证明所有关联与应用行为都正确。

测试应用应关闭真实邮件、付款、回调和重复任务,防止恢复演练影响生产。记录读取备份、导入和业务验收的耗时,确认是否满足恢复目标。正式切换前保留原服务与数据;若需要回退,先处理切换后产生的新写入,而不是简单把连接地址改回去。

参考资料

继续阅读

返回天理云文章中心

分享到:
上一篇
PostgreSQL 角色权限怎么分?数据库、schema 与表授权
下一篇
Redis 如何安全连接?绑定地址、ACL 与公网访问限制
服务中心
企微客服
企微客服
给您高效服务
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意