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

Définition de l'horodatage dans la transaction

Ceci genre de question revient de temps en temps - pour autant que je sache, le seul moyen totalement fiable est de faire ce que vous avez décrit, de stocker les identifiants mis à jour dans une table lors du premier processus et de les marquer comme traités dans le second. Fondamentalement, il s'agit de réinventer une file d'attente de messages dans la base de données. Vous avez assez bien décrit comment une solution naïve manquera des mises à jour.

Faire en sorte que le processus d'importation marque les lignes mises à jour peut être fait assez facilement, ou même mis en œuvre à l'aide de déclencheurs sur votre table de données. Si vous n'avez qu'un seul processus consommateur, alors tout ce qu'il a à faire est de delete from updated_item returning item_id pour obtenir une liste des mises à jour. Il semble que ce soit beaucoup plus compliqué, mais à mon humble avis, ce n'est pas vraiment le cas. Des fonctionnalités telles que la possibilité de surveiller la taille du backlog émergent également gratuitement.