From: | "Norbert Saint Georges" <Norbert(dot)Saint-Georges(at)generation-eco(dot)com> |
---|---|
To: | <pgsql-fr-generale(at)postgresql(dot)org> |
Subject: | Re: PostgreSQL9.1 trigger avec arguments |
Date: | 2012-12-05 22:13:53 |
Message-ID: | 8534997D52846E4CA436A90A7140ABB05550@database.ge.local |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Bonjour,
Eventuellement compléter l'article par un exemple de remplacement d'un trigger équivalent à celui sous FB
Exemple sous FB:
SET TERM ^ ;
CREATE TRIGGER WS_OFFERPRODUCT_BI FOR WS_OFFERPRODUCT
ACTIVE BEFORE INSERT
POSITION 0
AS
BEGIN
IF (NEW.GUID IS NULL) THEN
NEW.GUID = GEN_UUID() ;
END^
SET TERM ; ^
Impossible de trouver de la doc sur le sujet.
Merci d'avance.
Norbert Saint Georges
Six Sigma Business Intelligence Analyst
Generation ECO sprl
> -----Message d'origine-----
> De : pgsql-fr-generale-owner(at)postgresql(dot)org [mailto:pgsql-fr-generale-
> owner(at)postgresql(dot)org] De la part de Dimitri Fontaine
> Envoyé : jeudi 6 décembre 2012 00:01
> À : Martine AGUERA
> Cc : pgsql-fr-generale(at)postgresql(dot)org
> Objet : Re: [pgsql-fr-generale] PostgreSQL9.1 trigger avec arguments
>
> Bonsoir,
>
> Martine AGUERA <martine(dot)aguera(at)laas(dot)fr> writes:
> > Je bloque sur le passage d’arguments au niveau des Triggers.
> >
> > J’ai plusieurs tables où je dois calculer la durée entre deux dates,
> pour
> > cela je souhaiterais créer une fonction trigger unique à toutes les
> tables
> > en passant en paramètre la date de début et la date de fin.
>
> Les arguments des triggers sont statiques. Ils permettent de paramétrer
> une même fonction que l'on partage entre plusieurs triggers.
>
> Pour extraire dans OLD et NEW une valeur avec un nom de champ
> dynamique,
> fourni dans une variable de type text (TG_ARGV[0]), il est possible
> d'utiliser EXECUTE et de faire du SQL dynamique. Le mieux à mon avis
> reste d'utiliser l'extension hstore :
>
> http://www.postgresql.org/docs/9.2/static/hstore.html
>
> dim=# create extension hstore;
> CREATE EXTENSION
>
> dim=# create table foo(id serial primary key, date timestamptz default
> now());
> CREATE TABLE
>
> dim=# insert into foo(date) values(DEFAULT);
> INSERT 0 1
> dim=# insert into foo(date) values(DEFAULT);
> INSERT 0 1
> dim=# insert into foo(date) values(DEFAULT);
> INSERT 0 1
>
> dim=# select hstore(foo) -> 'date' from foo;
> ?column?
> -------------------------------
> 2012-12-05 22:45:22.491295+01
> 2012-12-05 22:45:24.071532+01
> 2012-12-05 22:45:25.057503+01
> (3 rows)
>
> Attention cependant :
>
> dim=# with t(x) as (select hstore(foo) -> 'date' from foo)
> select x, pg_typeof(x) from t;
> x | pg_typeof
> -------------------------------+-----------
> 2012-12-05 22:45:22.491295+01 | text
> 2012-12-05 22:45:24.071532+01 | text
> 2012-12-05 22:45:25.057503+01 | text
> (3 rows)
>
> Donc dans la fonction trigger, hstore(NEW) -> TG_ARGV[0] donnera la
> valeur souhaitée, mais attention, au "format" text. Il faudra donc la
> convertir avant de l'utiliser pour la soustraction :
>
> DECLARE
> hstore hash := hstore(NEW);
> BEGIN
> NEW.duree := (hash -> TG_ARGV[1])::timestamptz
> - (hash -> TG_ARGV[0])::timestamptz;
> END;
>
> Je crois que je vais transformer cela en article plus complet, merci
> pour le sujet :)
>
> Bonne continuation,
> --
> Dimitri Fontaine
> http://2ndQuadrant.fr PostgreSQL : Expertise, Formation et Support
>
>
> --
> Sent via pgsql-fr-generale mailing list (pgsql-fr-
> generale(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-fr-generale
>
From | Date | Subject | |
---|---|---|---|
Next Message | Dimitri Fontaine | 2012-12-05 22:58:50 | Re: PostgreSQL9.1 trigger avec arguments |
Previous Message | Dimitri Fontaine | 2012-12-05 21:55:26 | Re: PostgreSQL9.1 trigger avec arguments |