From: | Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> |
---|---|
To: | Amit Kapila <amit(dot)kapila(at)huawei(dot)com> |
Cc: | pgsql-general(at)postgresql(dot)org |
Subject: | Re: In one of negative test row-level trigger results into loop |
Date: | 2012-09-24 14:48:39 |
Message-ID: | 15073.1348498119@sss.pgh.pa.us |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-general |
Amit Kapila <amit(dot)kapila(at)huawei(dot)com> writes:
> Below test results into Loop:
> [ AFTER INSERT trigger does another insert into its target table ]
Well, of course. The INSERT results in scheduling another AFTER event.
> I understand that user can change his code to make it proper.
> However shouldn$B!G(Bt PostgreSQL also throws errors in such cases for recursion
> level or something related?
No. In the first place, there is no recursion here: the triggers fire
sequentially, not in a nested way. In the second place, this sort of
thing is not necessarily wrong --- it's okay for a trigger to do
something like that, so long as it doesn't repeat it indefinitely.
(A human can see that this function will never stop adding rows, but
Postgres' trigger mechanism doesn't have that much insight.) In the
third place, we don't attempt to prevent queries from taking
unreasonable amounts of time, and a loop in a trigger is not very
different from anything else in that line. Use statement_timeout if
you're concerned about that type of mistake.
regards, tom lane
From | Date | Subject | |
---|---|---|---|
Next Message | Adrian Klaver | 2012-09-24 15:07:34 | Re: Prolem to acess PostgeSQL from other mechine |
Previous Message | Daniele Varrazzo | 2012-09-24 14:41:52 | Re: Running CREATE only on certain Postgres versions |