7

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

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

或者每个需要版本控制的表都有一个 VERSION 表的副本会更好吗?

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

PS:我查看了在 SQL Server 中实施审计表的建议?有点像答案,除了我不知道 OldValue 和 NewValue 应该是什么类型?

PPS:如果表使用 SOFT DELETEs(幻像删除)而不是 HARD 删除,你的建议有什么改变吗?

4

2 回答 2

4

我将拥有每个表的副本以保存您希望保留的该表的版本。维护和使用全局版本控制表听起来有点像噩梦。

Postgres 文档中的此链接显示了 Postgres 中的一些审计触发器示例。

于 2010-07-06T17:03:41.677 回答
2

在全局表中,所有列都可以作为 hstore 类型存储在单个列中。我刚刚尝试过审计,效果很好,我推荐它。令人敬畏的审计表示例只需在要开始保留审计历史记录的表上添加触发器即可跟踪单个表中的所有更改。所有更改都存储为 hstore 类型 - 适用于 v 9.1+ 此链接

于 2013-06-30T16:59:03.457 回答