Найти в Дзене

Получение уведомлений от БД о изменении/создании сущности в PostgreSQL.


Создание хранимки для отправки сообщения в канал:

CREATE FUNCTION public."NotifyOnApplicationStatusChange"()
 RETURNS trigger
 LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
 data JSON;
 notification JSON;
BEGIN
 IF (TG_OP = 'DELETE') THEN
  data = row_to_json(OLD);
 ELSE
  data = row_to_json(NEW);
 END IF;

 notification = json_build_object(
   'table',TG_TABLE_NAME,
   'action', TG_OP,
   'data', data);

  PERFORM pg_notify('datachange', notification::TEXT);
 RETURN NEW;
END
$BODY$;

Создание тригера для вызова хранимки:

CREATE TRIGGER "OnStatusChange"
 AFTER UPDATE ON public."Applications"
 FOR EACH ROW
 WHEN (OLD."State" != NEW."State")
 EXECUTE PROCEDURE public."NotifyOnApplicationStatusChange"();

Код для чтения сообщений из БД в .NET (прослушивание канала).

Также с помощью LISTEN и NOTIFY в PostgreSQL можно построить очередь сообщений.
Около минуты