【问题标题】:PostgreSQL trigger an event on table updatePostgreSQL 在表更新时触发事件
【发布时间】:2019-03-18 18:48:29
【问题描述】:

我是 PostgreSQL 新手,我想知道或有一些线索:

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

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

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

【问题讨论】:

    标签: postgresql events database-trigger


    【解决方案1】:

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

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

    • 锁会被长时间持有,这会损害并发性和性能,并且还会增加死锁的风险。

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

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

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

    【讨论】:

    • 感谢您的回复。我会尝试找到现有的解决方案
    • PGQ是个大名鼎鼎的,但我没有亲身体验过。
    猜你喜欢
    • 1970-01-01
    • 2023-01-10
    • 2010-10-18
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多