Search Postgresql Archives

Re: Row visibility issue with consecutive triggers, one being DEFERRED

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




> -----Original Message-----
> From: Tom Lane [mailto:tgl@xxxxxxxxxxxxx]
> Sent: Donnerstag, 4. Juni 2015 15:56
> To: Marc Mamin
> Cc: pgsql-general@xxxxxxxxxxxxxx
> Subject: Re:  Row visibility issue with consecutive triggers,
> one being DEFERRED
> 
> Marc Mamin <M.Mamin@xxxxxxxxxxxx> writes:
> > The test below is running fine
> > but if you add the trigger push_foo_tr (uncomment) then the exception
> > is raised.
> 
> Doesn't that trigger result in infinite recursion?


yeah,
adding a modify check fix it:
UPDATE foo SET (id,v) = (NEW.id,NEW.v) WHERE id=NEW.id
AND (id,v) IS DISTINCT FROM (NEW.id,NEW.v); 
RETURN NEW;


I was trying to build a self containing case to track an issue with complex cross table validations,
but at the end it appeared, that the trigger were correct and raised an exception due to a missing WHERE Clause within an UPDATE statement.

I just didn't didn't trust my own triggers :)

sorry for the noise.

Marc Mamin


> 
> > CREATE OR REPLACE FUNCTION push_foo_trf () returns trigger AS $$
> BEGIN
> >   UPDATE foo SET (id,v) = (NEW.id,NEW.v) WHERE id=NEW.id; RETURN NEW;
> > END; $$ language plpgsql;
> 
> > --CREATE TRIGGER push_foo_tr
> > --  AFTER UPDATE ON foo
> > --      FOR EACH ROW EXECUTE PROCEDURE check_foo_trf();
> 
> AFAICS, each trigger firing would re-queue another one because of the
> fresh UPDATE.
> 
> 			regards, tom lane


-- 
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux