Bonjour à tous.
J'ai un soucis de synchronisation de tables avec Postgres.
J'ai une table (appellons la table_1) qui contiennent plusieurs millions de lignes et une autre table dans une autre base (table_2) qui reprends toutes les lignes de la table_1 mais pas toutes les colonnes (juste quelques unes).
J'aimerai faire que les modifs faites sur les lignes de ma table_1 soient répercutées sur ma table_2.
J'ai déjà un processus qui fait ca : un batch lancé toutes les 15 minutes (je n'ai pas besoin que ce soit forcément instantané) qui va répercuter les modifications en fonction d'une colonne date_de_mise_a_jour. Ce batch ne fait que récupérer les données des lignes mises à jour depuis le dernier lancement du batch et répercute les changements. Ca marche plutôt bien et ca traite quelques dizaines de milliers de lignes toutes les 15 minutes.
Mon soucis c'est que si je suis amené à lancer une procédure sur ma table_1 qui fait un traitement assez important, il se peut que cette procédure mette plus de 15 minutes à se lancer! Hors, comme vous le savez, quand on lance une procédure, la fonction now() retourne la date au lancement de la procédure; du coup les lignes en question ne sont pas synchronisées car, lorsque le batch se lance, il ne prends pas ces lignes en compte vu qu'elles ont été mises à jour il y a plus de 15 minutes.
Du coup je cherche un moyen plus intelligent de faire cette synchronisation.
Je pensais utiliser dblink mais ca n'est pas très concluant car ca m'oblige à faire des requêtes très lourdes pour faire la jointure et je ne souhaite pas utiliser Slony.
Avez-vous une idée à me soumettre? ^^
Partager