PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Notificando alterações postgres no aplicativo Java


Qual outra solução eu tenho para esse problema?

Use LISTEN e NOTIFY para informar ao seu aplicativo que as coisas mudaram.

Você pode enviar o NOTIFY de um gatilho que também registra alterações em uma tabela de filas.

Você precisará de uma conexão PgJDBC que tenha enviado um LISTEN para o(s) evento(s) que você está usando. Ele deve pesquisar o banco de dados enviando consultas vazias periódicas ("" ) se você estiver usando SSL; se você não estiver usando SSL, isso pode ser evitado usando as verificações de notificação assíncrona. Você precisará desembrulhar a Connection objeto do seu pool de conexões para poder converter a conexão subjacente para um PgConnection para usar ouvir/notificar com. Ver resposta relacionada

A parte do produtor/consumidor será mais difícil. Para ter vários consumidores simultâneos à prova de falhas no PostgreSQL, você precisa usar o bloqueio consultivo com pg_try_advisory_lock(...) . Se você não precisa de consumidores simultâneos, é fácil, basta SELECT ... LIMIT 1 FOR UPDATE uma linha de cada vez.

Espero que o 9.4 inclua um método mais fácil de pular linhas bloqueadas com FOR UPDATE , pois há trabalho em desenvolvimento para isso.