pgsql: Don't throw an error if a queued AFTER trigger no longer exists.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Don't throw an error if a queued AFTER trigger no longer exists.
Date: 2024-06-20 18:21:53
Message-ID: E1sKMPw-002K8y-EK@gemulon.postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Don't throw an error if a queued AFTER trigger no longer exists.

afterTriggerInvokeEvents and AfterTriggerExecute have always
treated it as an error if the trigger OID mentioned in a queued
after-trigger event can't be found. However, that fails to
account for the edge case where the trigger's been dropped in
the current transaction since queueing the event. There seems
no very good reason to disallow that case, so instead silently
do nothing if the trigger OID can't be found.

This does give up a little bit of bug-detection ability, but I don't
recall that these error messages have ever actually revealed a bug,
so it seems mostly theoretical. Alternatives such as marking
pending events DONE at the time of dropping a trigger would be
complicated and perhaps introduce bugs of their own.

Per bug #18517 from Alexander Lakhin. Back-patch to all
supported branches.

Discussion: https://postgr.es/m/18517-af2d19882240902c@postgresql.org

Branch
------
REL_16_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/4f196667627055ce7c6b3e8d3e9a4f5f6a906b86

Modified Files
--------------
src/backend/commands/trigger.c | 12 +++++++-----
src/test/regress/expected/triggers.out | 11 +++++++++++
src/test/regress/sql/triggers.sql | 14 ++++++++++++++
3 files changed, 32 insertions(+), 5 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Bruce Momjian 2024-06-20 23:53:20 pgsql: doc PG 17 relnotes: remove mention of undocumented GUC
Previous Message Peter Eisentraut 2024-06-20 09:56:14 pgsql: pg_combinebackup: Fix small mistake in --help output