BUG #16705: Triggers deferred during commit callback are not executed

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.

Responses

Browse pgsql-bugs by date

  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