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)
}

有关详细信息,请参阅 示例在新窗口中打开