Hi Red,

I have the slight suspicion that you have not understood what NEW and OLD
mean, in the context of a trigger, am I correct?

See http://www.postgresql.org/docs/9.0/static/plpgsql-trigger.html

Bèrto

On 1 December 2011 22:17, Red Light <skydelt...@yahoo.com> wrote:

>
> Hi Dave,
>
> when i use before trigger , nothing happen; i mean no cumputation is done
> (and when i start tu duplicate the same data just by mistake ...)
> i got the same error.
>   ------------------------------
> *
> From:* "Gauthier, Dave" <dave.gauth...@intel.com>
> *To:* Red Light <skydelt...@yahoo.com>; "pgsql-general@postgresql.org" <
> pgsql-general@postgresql.org>
> *Sent:* Thursday, December 1, 2011 8:09 PM
> *Subject:* RE: [GENERAL] recursive inner trigger call
>
> You set the trigger to fire off whenever ed_expore.bv is inserted or
> updated.  Then the trigger updates ed_explore.bv, which fires the update
> trigger again, etc... .  Infinite loop.  No?
>
> Maybe you just want to use a before trigger to set that value before the
> insert, then you wouldn't need the recursive after trigger?
>
>
>
>
> *From:* pgsql-general-ow...@postgresql.org [mailto:
> pgsql-general-ow...@postgresql.org] *On Behalf Of *Red Light
> *Sent:* Thursday, December 01, 2011 1:58 PM
> *To:* pgsql-general@postgresql.org
> *Subject:* [GENERAL] recursive inner trigger call
>
> Hi guys,
>
> i got the following problematic : i got a table called bv that have some
> 'entry data' and i have another column that need to be calculated and put
> back in the table:
>
>
> here is my table:
>
>
> CREATE TABLE public.bv
> (
>   id_bv integer NOT NULL,
>   c_vmax_actuel real,
>   d_capacite_barrages_new real,
>   CONSTRAINT "BV_pkey" PRIMARY KEY (id_bv)
> )
> WITH (
>   OIDS=FALSE
> );
> ALTER TABLE public.bv OWNER TO postgres;
>
>
> i created a trigger that do the necessary computation:
>
> CREATE OR REPLACE FUNCTION public.store_bv() RETURNS TRIGGER AS $store_bv$
>     DECLARE
>         v_vmax_actuel          numeric(15,2);
>     BEGIN
>     IF (TG_OP = 'UPDATE') OR (TG_OP = 'INSERT')   THEN
>
>         update ed_explore."bv"  set
>         c_vmax_actuel = ((d_capacite_barrages_new) / (30*86400)) ;
>
>     END IF;
>     RETURN NEW;
>
>
>     END;
> $store_bv$ LANGUAGE plpgsql;
>
>
> the declaration of my trigger :
>
> CREATE   TRIGGER store_bv_trigger
> after INSERT OR UPDATE  ON ed_explore.bv
>     FOR EACH ROW EXECUTE PROCEDURE public.store_bv();
>
>
> and now i start to insert my data:
>
> insert into public.bv (id_bv,d_capacite_barrages_new) values
> (1,7324591);commit;
>
>
>
> then the trigger got executed and goes in an infinite loop,here is the
> error that i got :
>
> *ERREUR:  dépassement de limite (en profondeur) de la pile
> HINT:  Augmenter le paramètre « max_stack_depth » après vous être assuré
> que la
> limite de profondeur de la pile de la plateforme est adéquate.
> CONTEXT:  instruction SQL « update ed_explore."bv" set c_vmax_actuel =
> ((d_capacite_barrages_new) / (30*86400)) »*
>
>
>
> And thanks for you help
>
>
>
>
>


-- 
==============================
If Pac-Man had affected us as kids, we'd all be running around in a
darkened room munching pills and listening to repetitive music.

Reply via email to