Re: recursive inner trigger call

From: "Gauthier, Dave" <dave(dot)gauthier(at)intel(dot)com>
To: Red Light <skydelta98(at)yahoo(dot)com>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: recursive inner trigger call
Date: 2011-12-01 19:09:07
Message-ID: 482E80323A35A54498B8B70FF2B8798004D6197B56@azsmsx504.amr.corp.intel.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

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-owner(at)postgresql(dot)org [mailto:pgsql-general-owner(at)postgresql(dot)org] On Behalf Of Red Light
Sent: Thursday, December 01, 2011 1:58 PM
To: pgsql-general(at)postgresql(dot)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

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Red Light 2011-12-01 19:17:54 Re: recursive inner trigger call
Previous Message Red Light 2011-12-01 18:57:47 recursive inner trigger call