如何在PostgreSQL上实现表修改的审计/版本控制

时间:2010-07-06 13:06:36

标签: database postgresql versioning audit database-versioning

我们正在PostgreSQL上使用Java / Spring / Hibernate实现一个新系统。一旦对表中的记录进行修改/删除,该系统就需要制作每个记录的副本。稍后,报告将查询审计表,以向用户显示数据。

我计划通过在表上设置触发器来实现此审核/版本控制功能,该触发器会将修改后的行(已删除的行)“TO”复制到一个名为ENTITY_VERSIONS的表中,该表将调用大约20列col1,col2,col3,col4等,它们将存储上表中的列; 然而,问题是如果有多个表要进行版本化,并且只有1个TARGET表(ENTITY_VERSIONS)来存储所有表的版本,我该如何设计TARGET表?

OR是否更好的是每个需要版本化的表的VERSION表都有一个COPY?

如果可以共享用于实现审计/版本控制的PostgreSQL触发器(和相关的存储过程)代码的一些指针,那将是一个奖励。

P.S:我看了Suggestions for implementing audit tables in SQL Server?并且有点像答案,除了我不知道OldValue和NewValue应该是什么类型的?

P.P.S:如果桌子使用SOFT DELETE(幻像删除)而不是HARD删除,你的任何建议会改变吗?

2 个答案:

答案 0 :(得分:4)

我会得到每个表的副本来保存您希望保留的表的版本。维护和使用全局版本控制表听起来有点噩梦。

Postgres文档中的

This link显示了Postgres中的一些审计触发器示例。

答案 1 :(得分:2)

在全局表中,所有列都可以作为hstore类型存储在单个列中。我只是尝试了审核,我的工作很棒,我推荐它。令人敬畏的审计表示例只需在您希望开始保留审计历史记录的表上添加触发器,即可跟踪单个表中的所有更改。所有更改都存储为v 9.1 +的hstore类型   this link