Estou lutando com o mecanismo LISTEN - NOTIFY do PostgreSQL. Eu abro dois consoles e me conecto ao meu banco de dados usando o cliente psql:
psql -U postgres test_db
No primeiro console eu assino alguma notificação:
test_db=# listen event;
LISTEN
No segundo console estou tentando enviar uma notificação:
test_db=# notify event;
NOTIFY
E nada acontece no primeiro console. Mas se eu enviar uma notificação do console 1, eu a recebo e também recebo todas as notificações anteriores do console 2.
Eu uso o PostgreSQL 9.2.1 no CentOS 6.5 x64.
Este é um
psql
problema.psql
está esperando que você digite algo em sua linha de comando. Ele só verifica as notificações do servidor quando tem um motivo para entrar em contato com o servidor e você não forneceu um motivo.Eles poderiam ter implementado de forma diferente, de modo que ele usasse um
select
loop para esperar no teclado ou no servidor, o que for interessante primeiro. Mas isso tornaria as coisas muito mais complicadas e não foi assim que foi feito.Este é o mesmo motivo que, se você derrubar o servidor,
psql
não percebe até que você tente fazer algo que tente falar com o servidor.Observe que o mesmo problema existirá com clientes/bibliotecas diferentes de
psql
, e diferentes bibliotecas resolvem (ou falham em resolvê-lo) de maneiras diferentes.