gpt4 book ai didi

Postgresql LISTEN/NOTIFY 回顾

转载 作者:行者123 更新时间:2023-11-29 12:43:15 25 4
gpt4 key购买 nike

我创建了以下触发器来跟踪 postgres 表上的所有更改。

DROP TRIGGER tr_request_update_notify ON requests;

CREATE OR REPLACE FUNCTION request_update_notify() RETURNS trigger as $$
BEGIN
PERFORM pg_notify('request_update_notify', json_build_object('table', TG_TABLE_NAME, 'id', NEW.id, 'event', NEW.event, 'type', TG_OP)::text);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;


CREATE TRIGGER tr_request_update_notify AFTER UPDATE or INSERT ON requests FOR EACH ROW EXECUTE PROCEDURE request_update_notify();

另一个应用程序将监听连接并对每个事件应用适当的处理。

如果事件发生并且我的应用程序未启动,则永远不会处理该事件。有没有办法回顾所有错过的通知?

最佳答案

通知不会存储在任何地方,它们只会发送到在同一通知 channel 上监听的任何 session 。但是看到您在数据库中,为什么不将通知存储在表中,然后监听器在事件时只需轮询该表。然后,您还可以直接使用 json 而不是将其转换为 text。不像 NOTIFY/LISTEN 那样“自动”,但在其他方面非常简单。

CREATE OR REPLACE FUNCTION request_update_notify() RETURNS trigger as $$
BEGIN
INSERT INTO my_notifications (channel, message_time, notification)
VALUES ('request_update_notify', CURRENT_TIME,
json_build_object('table', TG_TABLE_NAME,
'id', NEW.id,
'event', NEW.event,
'type', TG_OP)
);
RETURN NEW;
END;
$$ LANGUAGE plpgsql;

关于Postgresql LISTEN/NOTIFY 回顾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38521517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com