Re: Trigger function
От | Nicolas Mitchell |
---|---|
Тема | Re: Trigger function |
Дата | |
Msg-id | 53180757-855C-4FFF-B5CC-572BAEFD9397@posteo.net обсуждение исходный текст |
Ответ на | Re: Trigger function ("David G. Johnston" <david.g.johnston@gmail.com>) |
Ответы |
Re: Trigger function
|
Список | pgsql-novice |
On 27 Jul 2021, at 23:13, David G. Johnston wrote: > On Tuesday, July 27, 2021, Nicolas Mitchell <mitchelln@posteo.net> > wrote: > >> >> But when I have tried this with the following trigger/function >> (BEFORE/AFTER), PG goes into a loop. The two associated sequences >> (object, >> host) are incremented until I break the execution but no insert >> happens in >> either table. My code is causing an endless loop. I’m too green to >> understand why! I’d be grateful for any hints to help me on my way. >> >> CREATE OR REPLACE FUNCTION public.func__host__bi() >> RETURNS trigger AS >> $$ >> begin >> >> INSERT INTO host (name, domain, object) >> VALUES (NEW.name, NEW.domain, (SELECT * FROM object_id)); >> RETURN NEW; >> end >> $$ >> LANGUAGE 'plpgsql' >> >> CREATE TRIGGER trig__host_bi >> BEFORE INSERT <————————————> or AFTER >> INSERT >> ON public."host" >> FOR EACH ROW >> EXECUTE PROCEDURE public.func__host__bi(); >> > > You are getting an infinite cycle because while in the middle of > inserting > a row into host, which provokes the trigger, you go and execute > another > insert command for host, provoking the same trigger, performing yet > another > insert, provoking the same trigger, etc… I see, I think. INSERT going to happen > BEFORE INSERT trigger firing function with > INSERT INTO host > INSERT going to happen > BEFORE INSERT trigger firing function with > etc… > > When you write a trigger for a table you should be executing commands > against the same table. I believe this implies that the code creating a new object (INSERT INTO public.object…) row should reside elsewhere. > > You change the data in the ongoing insert by returning a different row > from > the trigger function (i.e., modify your “return new;” line - or > modify NEW > itself?). I’m absorbing this sentence… Many thanks for your assistance. Nic
В списке pgsql-novice по дате отправления: