From: | PG Bug reporting form <noreply(at)postgresql(dot)org> |
---|---|
To: | pgsql-bugs(at)lists(dot)postgresql(dot)org |
Cc: | rbiro(at)interfacefinancial(dot)com |
Subject: | BUG #16705: Triggers deferred during commit callback are not executed |
Date: | 2020-11-06 03:17:02 |
Message-ID: | 16705-f34c72116d9b2174@postgresql.org |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-bugs |
The following bug has been logged on the website:
Bug reference: 16705
Logged by: Ross Biro
Email address: rbiro(at)interfacefinancial(dot)com
PostgreSQL version: 10.10
Operating system: Linux
Description:
If you register a function with RegisterXactCallback that causes a trigger
to be deferred, that trigger is never executed.
The code in CommitTransaction:
/*
* Do pre-commit processing that involves calling user-defined code,
such
* as triggers. Since closing cursors could queue trigger actions,
* triggers could open cursors, etc, we have to keep looping until
there's
* nothing left to do.
*/
for (;;)
{
/*
* Fire all currently pending deferred triggers.
*/
AfterTriggerFireDeferred();
/*
* Close open portals (converting holdable ones into static
portals).
* If there weren't any, we are done ... otherwise loop back to
check
* if they queued deferred triggers. Lather, rinse, repeat.
*/
if (!PreCommit_Portals(false))
break;
}
CallXactCallbacks(is_parallel_worker ? XACT_EVENT_PARALLEL_PRE_COMMIT
: XACT_EVENT_PRE_COMMIT);
It may be possible to just move CallXactCallbacks inside the loop or ad a
second loop around the existing loop and the callbacks. Alternatively,
perhaps the right solution is to document that commit callbacks cannot do
anything that might defer a trigger, or prevent triggers from being deferred
for the rest of the transactions.
From | Date | Subject | |
---|---|---|---|
Next Message | Thomas Munro | 2020-11-06 03:18:21 | Re: BUG #16704: Segmentation Problem - SSL SYSCALL error: EOF detected |
Previous Message | Raphael Megzari | 2020-11-06 02:51:46 | Re: BUG #16665: Segmentation fault |