Сповіщення в реальному часі (SSE)

1 хв читання

Сповіщення в реальному часі (SSE)

Підпишіться на канали PostgreSQL NOTIFY через Server-Sent Events:

# Bearer-токен (JWT або API-токен)
curl -N "http://localhost:8080/db/my_database/sse?channels=orders,users" \
  -H "Authorization: Bearer $TOKEN"

# Прямі облікові дані (HTTP Basic Auth — GRANT … TO pgarachne не потрібен)
curl -N "http://localhost:8080/db/my_database/sse?channels=orders,users" \
  -u "alice:secret"

Кожне повідомлення — це JSON із назвою каналу та вмістом (payload):

{"channel":"orders","data":{"id":123,"status":"created"}}

Якщо вміст є звичайним текстом, він обгортається як рядок у data.

Надсилання сповіщень з PostgreSQL

З psql або будь-якої іншої сесії бази даних:

-- Простий текстовий вміст
NOTIFY orders, 'new order';

-- JSON-вміст
NOTIFY orders, '{"id":123,"status":"created"}';

З тригера або збереженої процедури:

PERFORM pg_notify('orders', json_build_object('id', NEW.id, 'status', NEW.status)::text);
Примітка: NOTIFY доставляється іншим сесіям лише після того, як транзакція, що надсилає повідомлення, буде завершена (commit). Якщо ви виконуєте його всередині відкритої транзакції в psql, підписники не отримають повідомлення, доки ви не виконаєте COMMIT.