PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Notification des modifications postgres à l'application Java

Quelle autre solution ai-je à ce problème ?

Utilisez LISTEN et NOTIFY pour dire à votre application que les choses ont changé.

Vous pouvez envoyer le NOTIFY à partir d'un déclencheur qui enregistre également les modifications dans une table de file d'attente.

Vous aurez besoin d'une connexion PgJDBC qui a envoyé un LISTEN pour le ou les événements que vous utilisez. Il doit interroger la base de données en envoyant périodiquement des requêtes vides ("" ) si vous utilisez SSL ; si vous n'utilisez pas SSL, cela peut être évité en utilisant les contrôles de notification asynchrone. Vous devrez déballer la Connection objet de votre pool de connexion pour pouvoir convertir la connexion sous-jacente en un PgConnection utiliser écouter/notifier avec. Voir la réponse associée

Le bit producteur/consommateur sera plus dur. Pour avoir plusieurs consommateurs simultanés à l'abri des pannes dans PostgreSQL, vous devez utiliser le verrouillage consultatif avec pg_try_advisory_lock(...) . Si vous n'avez pas besoin de consommateurs simultanés, c'est simple, il vous suffit de SELECT ... LIMIT 1 FOR UPDATE une ligne à la fois.

Espérons que 9.4 inclura une méthode plus simple pour ignorer les lignes verrouillées avec FOR UPDATE , car il y a du travail de développement pour cela.