Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-fr-generale by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group