【问题标题】:PostgreSQL trigger an event on table updatePostgreSQL 在表更新时触发事件
【发布时间】:2019-03-18 18:48:29
【问题描述】:
我是 PostgreSQL 新手,我想知道或有一些线索:
我的问题是:当用户执行某些操作(登录、注册、更新信息)时,我有一个 SSO 在事件表中插入行。我需要在另一个解决方案(忠诚度计划)中实时利用这些插入。
现在我想每分钟查询一次表(在 nodeJS 中)并将表的大小与前一分钟的大小进行比较。我认为这不是好方法:)
【问题讨论】:
标签:
postgresql
events
database-trigger
【解决方案1】:
原则上,您可以使用触发器来做到这一点。如果 API 位于数据库外部,则您需要使用 C 或 PL/Perl 或 PL/Python 等语言编写的触发器函数来执行您需要的操作。
但是,除非可以保证此操作很快,否则在触发器中运行它可能不是一个好主意。触发器与触发语句在同一个事务中运行,因此如果您的触发器碰巧运行了很长时间,您最终会得到一个很长的数据库事务。这有两个主要缺点:
为避免这种风险,通常最好使用排队系统:触发器在队列中创建一个条目,这是一个快速操作,工作进程在数据库之外异步读取和处理这些队列条目。
众所周知,在数据库中实现队列非常困难,因此您可能需要寻找现有的解决方案。