Bonjour,
Je tente de mettre en place un système d'audit des tables d'une base de données, via un système de triggers sous PostgreSQL 8.4.
J'en suis à tenter d'insérer les anciennes données (avant mise à jour ou suppression) dans une table d'audit.
Pour m'en sortir, j'ai choisi une solution qui consiste à transformer en XML tout le contenu de la ligne avant changement, et stocker ça dans un champ de type xml.
Seulement, impossible de trouver comment transformer le contenu du record OLD en XML.
Voici ce que j'essaie :
J'ai stocké dans une table (audit.liste_tables) toutes les tables sur lesquelles l'enregistrement des modifications doit s'enregistrer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 CREATE OR REPLACE FUNCTION test.audit_delete_offline () RETURNS TRIGGER AS $body$ BEGIN INSERT INTO audit.data_change (tbl_id, chg_user, chg_datetime, chg_delete, chg_xml_data) SELECT lt.tbl_id, CURRENT_USER, CURRENT_TIMESTAMP, 1, XMLFOREST(OLD.*) FROM audit.liste_tables lt WHERE lt.tbl_schema = TG_TABLE_SCHEMA AND lt.tbl_name = TG_TABLE_NAME; RETURN NULL; END; $body$ LANGUAGE plpgsql;
Je crée ensuite mon trigger sur ma table à auditer.
Quand je supprime un enregistrement, j'ai l'erreur suivante :
D'où ma question : comment est-ce que je peux transformer en XML tout le contenu de la variable OLD dans un trigger ?ERROR: row expansion via "*" is not supported here
LINE 1: ...d, CURRENT_USER, CURRENT_TIMESTAMP, 0, XMLFOREST( $1 .*) FRO...
Merci d'avance à ceux qui tenteront de m'aider...
ced
Partager