PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Notifica delle modifiche postgres all'applicazione java

Quale altra soluzione ho per questo problema?

Usa LISTEN e NOTIFY per dire alla tua app che le cose sono cambiate.

Puoi inviare il NOTIFY da un trigger che registra anche le modifiche in una tabella di coda.

Avrai bisogno di una connessione PgJDBC che abbia inviato un LISTEN per gli eventi che stai utilizzando. Deve eseguire il polling del database inviando periodiche query vuote ("" ) se stai usando SSL; se non si utilizza SSL, ciò può essere evitato utilizzando i controlli di notifica asincrona. Dovrai scartare la Connection oggetto dal pool di connessioni per poter eseguire il cast della connessione sottostante a un PgConnection utilizzare ascolta/notifica con. Vedi risposta correlata

Il bit produttore/consumatore sarà più difficile. Per avere più consumer simultanei a prova di crash in PostgreSQL è necessario utilizzare il blocco di avviso con pg_try_advisory_lock(...) . Se non hai bisogno di consumatori simultanei, allora è facile, basta SELECT ... LIMIT 1 FOR UPDATE una riga alla volta.

Si spera che 9.4 includa un metodo più semplice per saltare le righe bloccate con FOR UPDATE , poiché c'è del lavoro in fase di sviluppo.