De acuerdo con la documentación de PostgreSQL sobreNOTIFY
:
El comando NOTIFY envía un evento de notificación junto con una cadena de "carga útil" opcional a cada aplicación cliente que haya ejecutado previamente el canal LISTEN para el nombre del canal especificado en la base de datos actual. Las notificaciones son visibles para todos los usuarios .
(énfasis mío)
Esto significa que no puedes hacer lo que quieres solo con LISTEN/NOTIFY
. Sin embargo, puede tener una tabla para almacenar mensajes en cola, LISTEN/NOTIFY
para notificar a las aplicaciones externas que "hay cosas nuevas en la cola de mensajes", y utilizar alguna lógica adicional de estas aplicaciones externas para que solo una consuma el mensaje.
La estrategia representada en el artículo ¿Para qué está SKIP LOCKED en PostgreSQL 9.5? es probablemente la forma más segura / fácil de implementar una cola de mensajes dentro de PostgreSQL. Preste especial atención a la parte "Cómo ayuda SKIP LOCKED". Lea también cuidadosamente una de sus advertencias:
Una cola implementada en el RDBMS nunca coincidirá con el rendimiento de un sistema de colas dedicado rápido, incluso uno que tenga las mismas garantías de atomicidad y durabilidad que PostgreSQL. Usar SKIP LOCKED es mejor que los enfoques existentes en la base de datos, pero aún así irás más rápido usando un motor de colas externo dedicado y altamente optimizado.
Esto es especialmente importante si el volumen de la cola es alto.