Savoir qui fait quoi et quand sur quelle donnée d'une table, garder l'historique de ces modifications
CREATE TABLE ma_table
(
id_data serial NOT NULL PRIMARY KEY,
attr_1 character varying,
attr_2 character varying,
attr_3 character varying
);
CREATE TABLE suivi_ma_table
(
operation character(6),
date_operation timestamp without time zone NOT NULL,
utilisateur character varying NOT NULL,
id_data integer,
attr_1 character varying,
attr_2 character varying,
attr_3 character varying
);
CREATE OR REPLACE FUNCTION alimente_suivi_ma_table()
RETURNS TRIGGER AS
$BODY$
BEGIN
--
-- Crée une ligne dans la table suivi qui reflète l'opération effectuées sur la table "ma_table",
-- utilise la variable spéciale TG_OP qui décrit l'opération courante
--
IF (TG_OP = 'DELETE') THEN
-- en cas de suppression on stocke la ligne supprimée
INSERT INTO suivi_ma_table SELECT 'DELETE', now(), user, OLD.*;
RETURN OLD;
ELSIF (TG_OP = 'UPDATE') THEN
-- en cas de mise à jour on stocke la ligne dans son état "après mise à jour"
INSERT INTO suivi_ma_table 'UPDATE', now(), user, NEW.*;
RETURN NEW;
ELSIF (TG_OP = 'INSERT') THEN
-- en cas d'insertion on stocke la ligne insérée
INSERT INTO suivi_ma_table SELECT 'INSERT', now(), user, NEW.*;
RETURN NEW;
END IF;
RETURN NULL;
END;
$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
CREATE TRIGGER suivi_saisie_observation
AFTER INSERT OR UPDATE OR DELETE
ON ma_table
FOR EACH ROW
EXECUTE PROCEDURE alimente_suivi_ma_table();
le rôle de connexion “rss” aura les droit de select sur la table “ma_table”
<?php
header("Content-Type: application/xml; charset=ISO-8859-1");
$dbcon=pg_connect("host=192.168.1.210 dbname=test user=rss password=rss");
if (isset($_GET['operation'])&&$_GET['operation']!='') {$where = 'lower(operation)=\''. $_GET["operation"] .'\'';}
$query = '
SELECT operation, date_operation, utilisateur, id_data, attr_1, attr_2, attr_3
FROM suivi_ma_table
ORDER BY date_operation DESC
LIMIT 20;
';
//echo $query;
$item = '<?xml version="1.0" encoding="ISO-8859-1" ?>
<rss version="2.0">
<channel>
<title>Ma table - dernières modificationa appoertées</title>
<link>http://www.google.fr</link>
<description>Suivi de modifications apportées à la table ma_table</description>
<language>Français</language>';
$result = pg_query($dbcon,$query);
while($row = pg_fetch_array($result))
{
$item.= '
<item>
<title>'. utf8_decode($row["nom_complet"]) .'</title>
<link>http://url_a_definir.org'</link>
<description><![CDATA['.utf8_decode($row["operation"]) .' par '. utf8_decode($row["utilisateur"]) . ' - <em>donnée n°' . utf8_decode($row["id_data"]) . '</em>]]></description>
</item>';
}
$item.='</channel></rss>';
echo $item;
?>