Bonjour,
Je cherche une façon de logger les modifications faites dans une base de données, pour pouvoir les répercuter facilement sur une autre base (sans faire de comparaisons).
J'avais pensé déposer des triggers sur chaque table, et enregistrer pour chaque action, le nom de la table, et la valeur de chacun des identifiants. Hélas, c'est assez complexe de faire quelque chose de générique.
N'y a-t-il pas un moyen de stocker une référence vers une ligne d'une table ? Exemple :
Une autre solution serait de modifier chaque table à surveiller, en ajoutant un boolean "new", mais ça oblige à modifier le schéma.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 CREATE TABLE differences ( table TEXT, row RECORD ); CREATE OR REPLACE FUNCTION diff_triggers_exec() RETURNS TRIGGER AS $diff_triggers_exec$ DECLARE BEGIN INSERT INTO differences(table, row) VALUES(TG_TABLE_NAME, NEW); RETURN NULL; END; $diff_triggers_exec$ LANGUAGE plpgsql;
Voyez-vous un autre mécanisme permettant d'enregistrer de façon assez générique les modifications faites sur un ensemble de tables ?
Merci.
Partager