在 Postgres 中使用审计表为 NOTIFY/LISTEN 创建触发器是个好主意吗?

Posted

技术标签:

【中文标题】在 Postgres 中使用审计表为 NOTIFY/LISTEN 创建触发器是个好主意吗?【英文标题】:Is using an Audit Table in Postgres to create triggers for NOTIFY/LISTEN a good idea? 【发布时间】:2016-08-13 21:25:01 【问题描述】:

所以我有一个安装了审计表的 postgres 数据库 - 来源 https://wiki.postgresql.org/wiki/Audit_trigger_91plus

现在我的问题如下:

我一直想创建一种流,通知我任何有权访问我的数据库的应用程序所做的任何更改。现在,我知道我可以通过 pg 创建触发器和发布/订阅,但这会占用性能时间,而且随着数据库的扩展,这会变得很重要。

因此,我并没有减慢实际数据库的速度,而是想知道我是否要在主表上执行相同的 NOTIFY/LISTEN 功能,而是将其安装在审计表上。

有人做过吗?如果是这样,您经历过什么,专业人士?缺点?或者,如果有人知道我为什么应该或不应该这样做,请告诉我。

谢谢

【问题讨论】:

【参考方案1】:

通过NOTIFY/LISTEN,专业人士:

与服务器的轻度通信,无需拉取数据更改。

通过NOTIFY/LISTEN,CON-s:

实践表明,仅仅设置它并监听事件是不够的,因为由于各种通信问题,通道经常会出现故障。对于一个严肃的系统,您需要建立一个额外的监控服务来验证您的监听器是否仍在运行,如果没有 - 销毁现有的并创建新的。这可能很棘手,您可能找不到一个很好的例子。

通过预定的数据拉取,PRO-s:

简单 - 您只需按照计划检查数据更改即可; 可靠性 - 一旦拉取实施工作正常,就没有什么可破坏的了。

通过预定的数据拉取,CON-s:

服务器的额外流量,取决于您需要多快看到数据更改,以及这将如何干扰(如果有的话)对服务器的其他请求。

【讨论】:

以上是关于在 Postgres 中使用审计表为 NOTIFY/LISTEN 创建触发器是个好主意吗?的主要内容,如果未能解决你的问题,请参考以下文章

Postgres LISTEN/NOTIFY - 低延迟,实时?

postgres 外键是不是意味着索引?

同步Postgres和ElasticSearch的最佳方法是什么?

Spring-JPA 可以与 Postgres 分区一起使用吗?

仅保留审计表中每个对象的最后 5 行

Web 应用程序的基于数据库的审计日志需要用户 ID