Powiadomienia w czasie rzeczywistym (SSE)

1 min czytania

Powiadomienia w czasie rzeczywistym (SSE)

Subskrybuj kanały PostgreSQL NOTIFY za pomocą Server-Sent Events:

# Token Bearer (JWT lub token API)
curl -N "http://localhost:8080/db/my_database/sse?channels=orders,users" \
  -H "Authorization: Bearer $TOKEN"

# Bezpośrednie dane logowania (HTTP Basic Auth — GRANT … TO pgarachne nie jest wymagany)
curl -N "http://localhost:8080/db/my_database/sse?channels=orders,users" \
  -u "alice:secret"

Każda wiadomość jest w formacie JSON i zawiera nazwę kanału oraz payload:

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

Jeśli payload jest zwykłym tekstem, zostaje zapakowany jako string w polu data.

Wysyłanie powiadomień z PostgreSQL

Z psql lub innej sesji bazy danych:

-- Prosty tekstowy payload
NOTIFY orders, 'new order';

-- Payload JSON
NOTIFY orders, '{"id":123,"status":"created"}';

Z triggera lub procedury składowanej:

PERFORM pg_notify('orders', json_build_object('id', NEW.id, 'status', NEW.status)::text);
Uwaga: NOTIFY jest dostarczany do innych sesji tylko po zatwierdzeniu (commit) transakcji wysyłającej. Jeśli wykonasz je w otwartej transakcji w psql, subskrybenci nie otrzymają powiadomienia, dopóki nie wykonasz COMMIT.