Re: En cas d'update réaliser un insert dans une autre table

From: Marc Cousin <mcousin(at)sigma(dot)fr>
To: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: En cas d'update réaliser un insert dans une autre table
Date: 2008-12-12 09:47:37
Message-ID: 200812121047.37849.mcousin@sigma.fr
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Le Friday 12 December 2008 10:26:57 BPascal, vous avez écrit :
> Bonjour,
>
>
> Comment faire, en cas d'update dans une table via PHP, pour réaliser un
> insert automatiquement dans une autre table via postgresql.
>
> C'est une question qui doit fréquente, je cherche dans la documentation,
> trigger/postgresql je suppose.
>
> Si vous connaissez une documentation, un exemple, ...
>
>
> Comme ma question est assez général je donne un exemple simplifié
>
> Soit la table Etablissement, quand Etablissement.Nom change alors je
> renseigne date.maj et je veux créer un enregistrement dans Historique
>
> Table Etablissement
> IdEtablissement
> Nom
> Date_maj
>
>
>
> Table Historique
> Idhistorique
> IdEtablissement
> Nom
> Date_historique
>
>
> Je peux le faire en PHP, mais je souhaite faire faire ce travail par
> postgresql. Je suppose que c'est possible via "trigger" mais je n'ai
> jamais utilisé ce genre de chose.
> Je cherche un exemple simple à imiter.
>
> A+
> --
> Pascal

Pour commencer, dans la doc postgresql, ce qui concerne la question, c'est les
chapitres 35 et 38 (si tu veux faire ton trigger en plpgsql, ce qui me semble
un bon début).

Sinon j'ai un exemple quick n dirty pour te mettre le pied à l'étrier (c'est
un trigger sur insertion, pas sur update, mais cela revient à peu de choses
près au même):

Creation de la fonction:

CREATE OR REPLACE FUNCTION logs_stat_virus()
RETURNS trigger AS
$BODY$BEGIN
if new.evenement = 'V' THEN
insert into stat_virus VALUES (new.date, new.info_sup);
END IF;
if new.evenement = 'A' THEN
insert into stat_spam VALUES (new.date);
END IF;
return new;
END$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;

Declaration du trigger :

CREATE TRIGGER trigger_virus
BEFORE INSERT
ON logs
FOR EACH ROW
EXECUTE PROCEDURE logs_stat_virus();

In response to

Browse pgsql-fr-generale by date

  From Date Subject
Next Message stephane 2008-12-12 13:13:49 Re: En cas d'update réaliser un insert dans une autre table
Previous Message BPascal 2008-12-12 09:26:57 En cas d'update réaliser un insert dans une autre table