在 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和ElasticSearch的最佳方法是什么?