Logger les modifications dans une BD
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 :
Code:
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; |
Une autre solution serait de modifier chaque table à surveiller, en ajoutant un boolean "new", mais ça oblige à modifier le schéma.
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.