You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何回滚pg_restore恢复结果?需重新以系统用户执行

关于PostgreSQL恢复操作的回滚问题

情况1:恢复操作尚未完成(仍在运行中)

如果pg_restore还在执行过程中,直接按下Ctrl+C中断进程即可。由于你使用了--single-transaction参数,整个恢复流程被包裹在单个事务内,中断后事务会自动回滚,数据库将回到恢复前的状态。

情况2:恢复操作已经完成

这种情况下没有直接命令可以回滚已完成的恢复——因为--single-transaction会在所有恢复操作成功后自动提交事务,数据已经持久化到数据库中。你需要通过以下方式回到目标状态:

  • 若执行此次恢复前,你对目标数据库dbname做过备份,直接使用该备份重新恢复即可。
  • 若没有提前备份,需先重建空的目标数据库,再用系统用户重新执行恢复命令。重建数据库的命令示例:
    # 删除现有数据库(需使用有权限的用户执行)
    dropdb --host=host --username=postgres --port=6432 dbname
    # 创建空数据库
    createdb --host=host --username=postgres --port=6432 dbname
    
    上述命令中的postgres是PostgreSQL默认的系统级超级用户,你也可以替换为其他拥有足够权限的系统用户。

关键说明

--single-transaction的核心作用是保证恢复操作的原子性:要么所有操作都成功提交,要么中途失败后全量回滚。但一旦恢复流程顺利完成,事务就已经提交,无法再通过命令撤销已完成的变更。

内容的提问来源于stack exchange,提问作者poisoned_monkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 20:33:09