我希望记录数据库中某些表的每个更改历史,以便能够重建历史状态以进行分析。 我正在使用Postgres,并且这个MVCC东西似乎可以用于此目的,但我找不到任何支持此事的文档。我能行吗? 有更好的方法吗?
更新
我已经将Denis的回答标记为答案,因为他确实回答了我想要什么,即MVCC是否适合该任务。 然而,我采取的策略如下:
可进行在线备份/定时恢复(Postgres功能),详见:http://www.postgresql.org/docs/8.1/static/backup-online.html。 将Write Ahead Log设置为归档模式,拍摄数据库快照(例如,在数据库启动之前),然后不断归档WAL。 您随时可以使用日志重放来调用数据库的状态,并具有热备份的附加好处(通过在您的备份服务器上不断重播新的WAL)。
也许这种方法不像其他保留历史方式那样优雅,因为您需要为您想要查询的每个时间点实际上构建数据库,但它似乎非常容易设置且不会失去任何信息。 这意味着,当我有时间改进我的历史数据处理方式时,我将拥有所有内容,因此能够将我的笨拙系统转换为更优雅的系统。
使这个方法非常完美的一个关键事实是,对于特定应用程序,我的“有效时间”与我的“事务时间”相同——如果不是这种情况,我只会捕获“事务时间”。 在发现了WAL之前,我正在考虑仅拍摄每天的快照之类的操作,但是其大量的存储需求和数据损失并不适合我的需求。
对于快速启动并在一开始就不会影响到数据保留的快速方法,这似乎是完美的解决方案。