PostgreSQL 监听和通知
监听/通知
PostgreSQL 使用 NOTIFY 和 LISTEN 命令支持发布/订阅消息模式,例如,您可以使用 LISTEN
命令订阅通知
LISTEN channel_name;
然后使用可选的文本有效负载发送通知
NOTIFY channel_name, 'optional payload';
结合表触发器,您可以在更新/删除行时发送通知,以使缓存失效或重新索引表
CREATE FUNCTION users_after_update_trigger()
RETURNS TRIGGER AS $$
BEGIN
PERFORM pg_notify('users:updated', NEW.id::text);
RETURN NULL;
END;
$$
LANGUAGE plpgsql;
CREATE TRIGGER users_after_update_trigger
AFTER UPDATE ON users
FOR EACH ROW EXECUTE PROCEDURE users_after_update_trigger();
pgdriver.Listener
pgdriver 提供 Listener,它允许监听通知并在数据库连接丢失时自动重新订阅频道
ln := pgdriver.NewListener(db)
if err := ln.Listen(ctx, "users:updated"); err != nil {
panic(err)
}
for notif := range ln.Channel() {
fmt.Println(notif.Channel, notif.Payload)
}
您可以使用 Notify 方法发送通知
if err := pgdriver.Notify(ctx, db, "channel_name", "optional payload"); err != nil {
panic(err)
}
有关详细信息,请参阅 示例。