【问题标题】:How to implement Auditing/versioning of Table Modifications on PostgreSQL如何在 PostgreSQL 上实现表修改的审计/版本控制
【发布时间】:2011-03-12 07:30:48
【问题描述】:

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

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

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

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

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

P.P.S:如果表使用 SOFT DELETE(幻像删除)而不是 HARD 删除,您的建议是否有任何更改?

【问题讨论】:

    标签: database postgresql versioning audit database-versioning


    【解决方案1】:

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

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

    【讨论】:

    • +1 谢谢。我想知道“全球审计表”与“每个表的审计表”相比查询数据以进行报告的优势是什么?
    • 如果你设法拥有一个全球审计表,我预见到很多类型转换。我的意思是...您会将所有列存储在哪种类型中?
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 1970-01-01
      相关资源
      最近更新 更多