[TRIGGER] transformer en XML le contenu de OLD.*
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 :
Code:
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; |
J'ai stocké dans une table (audit.liste_tables) toutes les tables sur lesquelles l'enregistrement des modifications doit s'enregistrer.
Je crée ensuite mon trigger sur ma table à auditer.
Quand je supprime un enregistrement, j'ai l'erreur suivante :
Citation:
ERROR: row expansion via "*" is not supported here
LINE 1: ...d, CURRENT_USER, CURRENT_TIMESTAMP, 0, XMLFOREST( $1 .*) FRO...
D'où ma question : comment est-ce que je peux transformer en XML tout le contenu de la variable OLD dans un trigger ?
Merci d'avance à ceux qui tenteront de m'aider...
ced