PostgreSQL触发表更新事件

时间:2019-03-18 10:04:41

标签: postgresql events database-trigger

我是PostgreSQL的新手,我想知道以下方面或有一些线索:

  • 更新表时发出事件(调用API)

我的问题是:我有一个SSO,当用户执行某项操作(登录,注册,更新信息)时,该行会在事件表中插入行。我需要在另一个解决方案(忠诚度计划)中实时利用这些插入内容。

现在,我要记住每分钟查询一次表(在nodeJS中),并将表的大小与前一分钟的大小进行比较。我认为这不是好方法:)

1 个答案:

答案 0 :(得分:1)

原则上,您可以使用触发器来做到这一点。如果API在数据库外部,则需要使用C或PL / Perl或PL / Python等语言编写的触发函数,可以执行所需的操作。

但是,除非可以保证此动作是快速的,否则在触发器中运行它可能不是一个好主意。触发器与触发语句在同一事务中运行,因此,如果您的触发器碰巧运行了很长时间,则最终将导致长时间的数据库事务。这有两个主要缺点:

  • 锁被保留很长时间,这会损害并发性和性能,并增加死锁的风险。

  • Autovacuum无法删除在事务开始时仍处于活动状态的死行,这可能导致繁忙表上的表过多膨胀。

为避免这种风险,通常最好使用排队系统:触发器在队列中创建一个条目,这是一项快速动作,工作进程在数据库外部异步读取和处理这些队列条目。

在数据库中实现队列非常困难,因此您可能需要寻找现有的解决方案。