我们每晚对我们的数据库进行完整备份,然后我使用该转储创建我自己的 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。
上述两种选择都失败了,因为我有几个本地数据库在同一个集群中运行,并且汇总了磁盘上的大量数据。没有办法以这种方式分离数据库!所以这里的文件复制操作不会给我任何速度增益。