postgresql - PostgreSQL 在表更新时触发事件
问题描述
我是 PostgreSQL 的新手,我想知道或有一些线索:
- 更新表时发出事件(调用 API)
我的问题是:当用户执行某些操作(登录、注册、更新信息)时,我有一个 SSO 在事件表中插入行。我需要在另一个解决方案(忠诚度计划)中实时利用这些插入。
现在我想每分钟查询一次表(在 nodeJS 中)并将表的大小与前一分钟的大小进行比较。我认为这不是好方法:)
解决方案
原则上,您可以使用触发器来做到这一点。如果 API 在数据库外部,您需要一个用 C 或 PL/Perl 或 PL/Python 等语言编写的触发器函数来执行您需要的操作。
但是,除非可以保证此操作很快,否则在触发器中运行它可能不是一个好主意。触发器与触发语句在同一个事务中运行,因此如果您的触发器碰巧运行了很长时间,您最终会得到一个很长的数据库事务。这有两个主要缺点:
锁会被长时间持有,这会损害并发性和性能,并且还会增加死锁的风险。
Autovacuum 无法删除事务启动时仍处于活动状态的死行,这可能导致繁忙表上的表过度膨胀。
为了避免这种风险,通常最好使用排队系统:触发器在队列中创建一个条目,这是一个快速操作,工作进程在数据库之外异步读取和处理这些队列条目。
众所周知,在数据库中实现队列非常困难,因此您可能需要寻找现有的解决方案。
推荐阅读
- forms - 未收到 Formsubmit.co 激活电子邮件
- javascript - 为什么 navigator.mediaDevices.enumerateDevices() 返回不同的值?
- javascript - 无法读取 discord.js 中未定义的属性“缓存”
- ios - 如何在一个集合视图中获取多个集合单元而不创建 XIB
- laravel - laravel 图像验证总是失败
- typescript - 尝试返回地图时“没有重载匹配此调用”
- zoho - Zoho creator 与 zoho 图书的集成
- javascript - 如何在视频中制作多个缓冲区?(互动视频JAVASCRIPT)
- python - 使用 python 3.6 Tkinter 和 cx_Freeze 或 PyInstaller(使用 dlib)创建可执行文件,但由于 dlib,DLL 无法加载
- java - Thymeleaf with mule 无法解析资源下的 HTML 路径