Відповідно до документації PostgreSQL проNOTIFY
:
Команда NOTIFY надсилає подія сповіщення разом з необов'язковою рядкою "корисного навантаження" для кожної клієнтської програми, яка раніше виконала канал LISTEN для вказаного імені каналу в поточній базі даних. Повідомлення бачать усі користувачі .
(наголос мій)
Це означає, що ви не можете робити те, що тільки хочете LISTEN/NOTIFY
. Однак ви можете мати як таблицю для зберігання повідомлень у черзі, LISTEN/NOTIFY
сповіщення зовнішніх програм про те, що "в черзі повідомлень є нові речі", а також використовувати додаткову логіку з цих зовнішніх програм, щоб повідомлення споживало лише один.
Стратегія, зображена в статті Для чого SKIP LOCKED у PostgreSQL 9.5? є, мабуть, найбезпечнішим / найпростішим способом реалізації черги повідомлень у PostgreSQL. Зверніть особливу увагу на частину "Як SKIP LOCKED допомагає". Прочитайте також уважно один із їх застережень:
Черга, реалізована в RDBMS, ніколи не буде відповідати продуктивності швидкої спеціальної системи черги, навіть тієї, яка дає ті ж гарантії атомності та довговічності, що і PostgreSQL. Використання SKIP LOCKED краще, ніж існуючі підходи до бази даних, але ви все одно будете йти швидше, використовуючи спеціалізований та високооптимізований механізм зовнішньої черги.
Це особливо важливо, якщо обсяг черги великий.