【发布时间】:2014-10-28 21:09:41
【问题描述】:
我们每晚对数据库进行完整备份,然后我使用该转储创建自己的 dev-db。 dev-db 的创建大约需要 10 分钟,所以它每天早上在我开始工作之前由 cron 安排。所以我现在可以使用几乎实时数据库了。
但是当我测试一些东西时,有时将完整的数据库或一些特定的表回滚到初始备份会很方便。当然,我可以完全重建 dev-db,但这会让我再等 10 分钟才能再次运行测试。
那么有没有一种简单的方法可以将数据库/表恢复/倒回到特定时间点或从转储中恢复?
我曾尝试像这样使用pg_restore 来恢复特定表:
pg_restore -d my-dev-db -n stuff -t tableA -t tableB latest-live-db.dump
我也尝试过-c和--data-only等选项。但是这里似乎有几个我没有预见到的问题:
- 当恢复的数据复制回来时,旧数据不会自动删除。
- 有几个外键约束使得这不可能(如果我错了,请纠正我),而无需在还原之前显式删除 FK,然后重新添加它们。
- 在这一点上,我根本不关心出现故障的 PK 序列,但这也可能是一个问题。
编辑:我测试/研究的更多内容:
pg_basebackup-
pg_basebackup的更强力替代方法是停止 db-server,复制 db-files,然后启动 db-server。
上述两种选择都失败了,因为我有几个本地数据库在同一个集群中运行,并且汇总了磁盘上的大量数据。没有办法以这种方式分离数据库!所以这里的文件复制动作不会给我任何速度增益。
【问题讨论】:
-
这对您有帮助吗? stackoverflow.com/questions/876522/… 它询问 pgAdmin 但由于该命令是常规 SQL,因此应该足够了。使用您的开发数据库作为模板,并在每次需要时从中创建一个新的。
-
PITR 和 WAL 归档?
标签: postgresql restore database-restore pg-restore