跳到主要内容

备份与恢复问题

备份与恢复问题通常发生在误操作后回档、跨环境恢复、导入导出或迁移过程中。处理前应先保护现场,避免继续写入扩大影响。

常见问题

现象可能原因
找不到可用备份备份策略未开启、超出保留周期、实例或地域选错
恢复后缺少近期数据恢复时间点早于数据写入时间
恢复后应用无法访问连接信息、账号权限或 RLS 策略不匹配
导入失败扩展缺失、角色不存在、表结构冲突
恢复耗时过长数据量大、索引多、恢复目标资源不足

先停止风险操作

如果是误删、误更新或程序异常写入,先暂停相关写入入口,例如定时任务、后台批处理或线上版本。

暂停后再评估是否需要回档、逻辑修复或从备份导出部分数据。

恢复前检查

  • 确认目标实例、数据库和恢复时间点。
  • 记录当前数据库状态,必要时先做一次导出。
  • 评估恢复会覆盖哪些时间点之后的数据。
  • 通知相关业务方,并安排低峰操作窗口。

恢复后校验

恢复完成后建议检查:

select count(*) from public.orders;
select max(created_at) from public.orders;

还应检查关键表行数、金额汇总、索引、扩展、RLS 策略和服务端连接配置。

逻辑导入失败

使用 pg_restore 或 SQL 文件导入失败时,常见原因包括:

  • 源库启用了目标库不支持的扩展。
  • dump 文件包含 owner 或 role,目标库不存在对应角色。
  • 表已存在且结构不一致。
  • 外键依赖顺序或数据完整性不满足。

可尝试使用 --no-owner,并先在测试库演练。

pg_restore --dbname="$DATABASE_URL" --no-owner backup.dump

后续改进

  • 在高风险变更前创建手动备份或逻辑导出。
  • 定期做恢复演练,验证备份可用性。
  • 重要批处理脚本支持 dry run 和分批提交。
  • 为核心表增加审计日志,降低回档范围。