如何回滚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 dbnamepostgres是PostgreSQL默认的系统级超级用户,你也可以替换为其他拥有足够权限的系统用户。
关键说明
--single-transaction的核心作用是保证恢复操作的原子性:要么所有操作都成功提交,要么中途失败后全量回滚。但一旦恢复流程顺利完成,事务就已经提交,无法再通过命令撤销已完成的变更。
内容的提问来源于stack exchange,提问作者poisoned_monkey
相关产品推荐
相关产品推荐

