PostgreSQL:后台触发器

6
我希望您能翻译以下与IT技术相关内容。需要的是在字段更新后运行触发器或在后台运行触发器。目前,一旦触发器被触发,UI就会阻塞,直到触发器本身中的过程执行完毕。有没有办法让触发器在字段更新后立即运行,而不会阻塞UI。
我已经尝试过:
CREATE CONSTRAINT TRIGGER property_created_simple_prod_trigger
    AFTER UPDATE ON properties DEFERRABLE INITIALLY DEFERRED
    FOR EACH ROW 
EXECUTE PROCEDURE simple_production_materialized_view_procedure_trigger();

但是不幸的是,什么都不起作用。


将调用update方法的内容放置在独立的线程中运行。 - Jorge Campos
请更新问题,列出命令和结果,并注释您得到了什么以及您想要得到什么。 - Vao Tsun
1个回答

3

PostgreSQL没有后台程序/触发器,所以您不能直接做。

我建议的是让触发器发送一个NOTIFY,然后您的应用程序LISTEN。将应用程序的LISTEN线程作为单独的连接进行管理,并由单独的线程在收到通知时执行后台处理。


1
后台工作者怎么样?https://www.postgresql.org/docs/current/static/bgworker.html - user330315
@a_horse_with_no_name 当然,如果他们想要实现自己的扩展,那是一个选项。但是没有预设的方法来做到这一点。尽管有提议(https://www.postgresql.org/message-id/CA%2BTgmoam66dTzCP8N2cRcS6S6dBMFX%2BJMba%2BmDf68H%3DKAkNjPQ@mail.gmail.com)和扩展(https://github.com/vibhorkum/pg_background)。 - Craig Ringer
和 https://www.postgresql.org/message-id/CA+TgmoaXQEt4tZ03FtQhnzeDEMzBck+Lrni0UWHVVgOTnA6C1w@mail.gmail.com - Craig Ringer
pg_background 可能是一个选项,但实际上,我会选择基于 listen/notify 的方法,因为这就是它的用途。我已经编写了 bgworkers,对于不熟悉 postgres 代码的人来说,编写异步触发器助手将 是一件有趣的事情。他们需要了解 IPC 机制和各种机制。 - Craig Ringer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接