【发布时间】:2018-05-13 02:11:43
【问题描述】:
我有兴趣保留数据库中某些表上发生的每次更改的运行历史记录,从而能够重建数据库的历史状态以进行分析。
我正在使用 Postgres,而这个 MVCC 东西似乎我应该能够为此目的利用它,但我找不到任何文档来支持这一点。我可以做吗?有没有更好的办法?
感谢任何输入!
UPD
我已将 Denis 的回答标记为答案,因为他确实回答了 MVCC 是否是我想要的,这就是问题所在。但是,我已经确定的策略在下面详细说明,以防有人发现它有用:
Postgres 功能可以满足我的需求:在线备份/时间点恢复。
http://www.postgresql.org/docs/8.1/static/backup-online.html 解释了如何使用此功能,但本质上您可以将此“预写日志”设置为存档模式,拍摄数据库快照(例如,在它上线之前),然后持续存档 WAL。然后,您可以随时使用日志重放来调用数据库的状态,如果您选择(通过不断地在备用服务器上重放新的 WAL),还可以使用热备用。
也许这种方法不像其他保存历史的方法那样优雅,因为您需要为要查询的每个时间点实际构建数据库,但是它看起来非常容易设置并且丢失零信息。这意味着当我有时间改进对历史数据的处理时,我将拥有一切,因此能够将笨重的系统转变为更优雅的系统。
使它如此完美的一个关键事实是,我的“有效时间”与特定应用程序的“交易时间”相同 - 如果不是这种情况,我只会捕获“交易时间”。
在我发现 WAL 之前,我正在考虑只拍摄每日快照之类的东西,但所涉及的大尺寸要求和数据丢失并不适合我。
为了快速启动和运行而不影响我从一开始的数据保留,这似乎是完美的解决方案。
【问题讨论】:
-
您绝对应该看看 NeXtep Designer IDE - 您可以将您的数据库置于版本控制之下并从头开始重新创建任何版本或迁移任何增量、同步数据库状态等。
-
@ChristopheFondacci 您还在使用您的 NexStep Designer IDE 吗?
-
@CMCDragonkai 我们目前正在提供维护和错误修复。我们当时无法开发新功能,但我们仍在执行任务中几乎每天都在使用该产品。
标签: postgresql versioning mvcc