Re: Fix dropped object handling in pg_event_trigger_ddl_commands - Mailing list pgsql-hackers

From Michael Paquier
Subject Re: Fix dropped object handling in pg_event_trigger_ddl_commands
Date
Msg-id YMHIQAdUA7LkrsFZ@paquier.xyz
Whole thread Raw
In response to Re: Fix dropped object handling in pg_event_trigger_ddl_commands  (Alvaro Herrera <alvherre@alvh.no-ip.org>)
Responses Re: Fix dropped object handling in pg_event_trigger_ddl_commands
List pgsql-hackers
On Wed, Jun 09, 2021 at 09:55:08AM -0400, Alvaro Herrera wrote:
> I'm not sure if we can reasonably implement a fix for older releases.
> I mean, it's a relatively easy test: do a syscache search for the object
> or a catalog indexscan (easy to do with get_object_property_data-based
> API), and if the object is gone, skip getObjectTypeDescription and
> getObjectIdentity.  But maybe this is too much code to add to stable
> releases ...

Except that these syscache lookups need to be done on an object-type
basis, which is basically what getObjectDescription() & friends now do
where the logic makes sure that we have a correct objectId <-> cacheId
mapping for the syscache lookups.  So that would be roughly copying
into event_trigger.c what objectaddress.c does now, but for the back
branches.  It would be better to just backport the changes to support
missing_ok in objectaddress.c if we go down this road, but the
invasiveness makes that much more complicated.

Another thing is that ATExecDropIdentity() does performDeletion() by
using PERFORM_DELETION_INTERNAL, which does not feed the dropped
sequence to pg_event_trigger_dropped_objects().  That feels
inconsistent with CREATE TABLE GENERATED that would feed to event
triggers the CREATE SEQUENCE and ALTER SEQUENCE commands, as well as
ALTER TABLE SET DATA TYPE on a generated column that feeds an internal
ALTER SEQUENCE.

An extra idea we could consider, as the drop events are logged before
the other ALTER TABLE subcommands, is to look at the event triggers
registered when the generated sequence is dropped and to erase from
existence any previous events associated to it, but that would make
the logic weak as hell.  In all this stuff, simply ignoring the
objects still sounds like a fair and simple course of action to take
if they are gone at the time an event trigger checks after them within
pg_event_trigger_ddl_commands().  Now, this approach makes my spider
sense tingle.
--
Michael

Attachment

pgsql-hackers by date:

Previous
From: Thomas Munro
Date:
Subject: Re: A test for replay of regression tests
Next
From: David Rowley
Date:
Subject: Re: Fix a few typos in brin_minmax_multi.c