]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Don't throw an error if a queued AFTER trigger no longer exists.
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 20 Jun 2024 18:21:36 +0000 (14:21 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 20 Jun 2024 18:21:36 +0000 (14:21 -0400)
commit1424c7abc44fcb61f6a2a63f7d163670ba3250be
treed95e3a6f37ed860a114659b810aaa3be7861dc34
parent27c6242a0484d58852c9e3c390ce643d2e41bd4b
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
src/backend/commands/trigger.c
src/test/regress/expected/triggers.out
src/test/regress/sql/triggers.sql