postgresql 创建listen notify .net core6.0监听连接

背景:数据库某张表定时有第三方更新到实时表里,收到数据更新以后,WEBSOCKET发送前端

-- 创建一个发送通知的函数

CREATE OR REPLACE FUNCTION notify_event(event_name text) RETURNS void AS $$

BEGIN

PERFORM pg_notify(event_name, '');

END;

LANGUAGE plpgsql; -- 创建一个触发器,在数据变化时调用通知函数 CREATE OR REPLACE FUNCTION notify_trigger() RETURNS trigger AS

BEGIN

PERFORM notify_event('data_changed');

RETURN NEW;

END;

LANGUAGE plpgsql; -- 在需要监听的表上创建触发器 CREATE TRIGGER data_change_trigger AFTER INSERT OR UPDATE OR DELETE ON river_area FOR EACH ROW EXECUTE FUNCTION notify_trigger(); .net core创建一个后台运行服务 using System; using System.Threading; using System.Threading.Tasks; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Npgsql; namespace Pipe.BLL { public class TableUpdateListenerService : BackgroundService { private readonly IServiceProvider _services; public TableUpdateListenerService(IServiceProvider services) { _services = services; } protected override async Task ExecuteAsync(CancellationToken stoppingToken) { using var scope = _services.CreateScope(); var serviceProvider = scope.ServiceProvider; var connectionString = serviceProvider.GetRequiredService\().GetConnectionString("LocalNpgsqlConnection"); using var conn = new NpgsqlConnection(connectionString); await conn.OpenAsync(stoppingToken); using var cmd = new NpgsqlCommand("listen data_changed", conn); cmd.ExecuteNonQuery(); conn.Notification += (sender, e) =\> { Console.WriteLine($"Received table update notification: {e.Payload}"); // 在这里执行相应的操作,处理接收到的通知 }; while (!stoppingToken.IsCancellationRequested) { using var transaction = conn.BeginTransaction(); await transaction.CommitAsync(); await Task.Delay(TimeSpan.FromSeconds(1), stoppingToken); // 可以选择适当的延迟时间 } } } } startup.cs注册下服务 services.AddHostedService\(); psql 发送测试。 UPDATE "public"."river_area" SET "objectid" = 5 WHERE "gid" = 3; NOTIFY data_changed, 'Your notification payload here'; 测试通过

相关推荐
哈哈老师啊1 天前
Springboot新冠检测信息管理系统10m6v(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
7ioik1 天前
MySQL默认事物隔离级别是什么?
数据库·mysql
程序边界1 天前
金仓数据库MongoDB兼容深度体验:从协议到性能的硬核拆解
数据库·mongodb
Miqiuha1 天前
软删除的好处
数据库
愚公搬代码1 天前
【愚公系列】《扣子开发 AI Agent 智能体应用》020-扣子数据库实战(创建/使用扣子数据库)
数据库·人工智能
冰冰菜的扣jio1 天前
InnoDB对于MVCC的实现
java·数据库·sql
老华带你飞1 天前
婚纱摄影网站|基于java + vue婚纱摄影网站系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
Gofarlic_OMS1 天前
从Adobe到SolidWorks:研发设计软件资产管理的现状分析
数据库·安全·adobe·oracle·金融·区块链
AI题库1 天前
PostgreSQL 18 从新手到大师:实战指南 - 1.4 PostgreSQL本地安装
数据库·postgresql
正在走向自律1 天前
【金仓数据库产品体验官】Oracle迁移实战:深度剖析金仓V9R2C13性能优化三大核心场景,代码与数据说话!
数据库·oracle·性能优化·数据库平替用金仓·电科金仓·金仓产品体验官