Bonjour,
Je suis actuellement sur un projet de mise en place d'un journal qui tient en temps réel toutes les modifications, insertions et suppressions de certaines tables dans la base de données.
J'ai commencé par utiliser un outils d'ETL (Talend) qui possède des composants CDC (Change Data Capture) et qui permet de gérer ce genre de mécanismes mais après plusieurs tests cela ne me convenait pas vraiment.
J'ai donc décidé de gérer cela moi même au sein du SGBD (ici postgre) et donc j'ai créé une table 'journal' qui s'alimente en fonction des Insert, Update et Delete d'une table source.
Cette table contient donc tous les champs de la table source et en plus un op_id (l'id de la table) une date_debut (date d'insertion ou de modifs) et une date_fin (date de modifs ou date de suppression) et en fait si j'ai par exemple 1 insertion, 4 modifs sur le même enregistrement, puis une suppression, mon journal aura 5 lignes (voir procédure pour l'aspect du journal)
J'ai donc créé des triggers pour 'catcher' mes insert, update et delete qui vont appeler chacun une procédure précise qui va gérer le journal.
J'en arrive à mon problème : pour l'insertion tout va bien, mes traitements conservent une rapidité correcte mais lorsque je lance un update en masse (par exemple passer en UpperCase 2 colonnes de toute la table) le temps d'exécution est multiplié par 100. Pareil pour le Delete.
Je sais que mes procédures lance des update sur le journal dans le cas de l'update et du delete sur la source, ça doit avoir un rapport avec ça. Je cherche désespérément comment arranger tout ça mais je ne trouve pas.
J'ai mis ma procédure en fichier attachée.
Merci d'avance pour mes sauveurs !
Partager