我有兴趣保留数据库中某些表上发生的每次更改的运行历史记录,从而能够重建数据库的历史状态以进行分析。
我正在使用 Postgres,而这个 MVCC 东西似乎我应该能够为此目的利用它,但我找不到任何文档来支持这一点。我可以做吗?有没有更好的办法?
任何输入表示赞赏!
UPD
我已将丹尼斯的回答标记为答案,因为他确实回答了 MVCC 是否是我想要的,这就是问题所在。但是,如果有人发现它有用,我已经确定的策略如下详述:
Postgres 功能可以满足我的需求:在线备份/时间点恢复。
http://www.postgresql.org/docs/8.1/static/backup-online.html解释了如何使用此功能,但基本上您可以将此“预写日志”设置为存档模式,拍摄数据库快照(例如,在它上线之前),然后不断地归档 WAL。然后,您可以随时使用日志重放来调用数据库的状态,如果您选择(通过不断地在备用服务器上重放新的 WAL),还可以使用热备用。
也许这种方法不像其他保存历史的方法那样优雅,因为您需要为要查询的每个时间点实际构建数据库,但是它看起来非常容易设置并且丢失零信息。这意味着当我有时间改进对历史数据的处理时,我将拥有一切,因此能够将我笨重的系统转换为更优雅的系统。
使它如此完美的一个关键事实是,我的“有效时间”与特定应用程序的“交易时间”相同——如果不是这种情况,我只会捕获“交易时间”。
在我发现 WAL 之前,我正在考虑只拍摄每日快照或其他东西,但所涉及的大尺寸要求和数据丢失并不适合我。
为了快速启动和运行而不损害我的数据保留,这似乎是一个完美的解决方案。