Re: DETACH PARTITION and FOR EACH ROW triggers on partitioned tables

Alvaro Herrera <alvherre@2ndquadrant.com>

From: Alvaro Herrera <alvherre@2ndquadrant.com>
To: Justin Pryzby <pryzby@telsasoft.com>
Cc: Amit Langote <amitlangote09@gmail.com>, Tom Lane <tgl@sss.pgh.pa.us>, PostgreSQL Hackers <pgsql-hackers@lists.postgresql.org>
Date: 2020-04-20T23:04:06Z
Lists: pgsql-hackers

Attachments

> +			deleteDependencyRecordsFor(TriggerRelationId,
> +					pg_trigger->oid,
> +					false);
> +			deleteDependencyRecordsFor(RelationRelationId,
> +					pg_trigger->oid,
> +					false);
> +
> +			CommandCounterIncrement();
> +			ObjectAddressSet(object, TriggerRelationId, pg_trigger->oid);
> +			performDeletion(&object, DROP_RESTRICT, PERFORM_DELETION_INTERNAL);
> +		}
> +
> +		systable_endscan(scan);
> +		table_close(tgrel, RowExclusiveLock);
> +	}

Two small issues here.  First, your second call to
deleteDependencyRecordsFor did nothing, because your first call deleted
all the dependency records.  I changed that to two
deleteDependencyRecordsForClass() calls, that actually do what you
intended.

The other is that instead of deleting each trigger, we can accumulate
them to delete with a single performMultipleDeletions call; this also
means we get to do CommandCounterIncrement just once.

v6 fixes those things and AFAICS is ready to push.

I haven't reviewed your 0002 carefully, but (as inventor of the "TABLE
t" marker for FK constraints) I agree with Amit that we should imitate
that instead of coming up with a new way to show it.

-- 
Álvaro Herrera                https://www.2ndQuadrant.com/
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Commits

  1. psql \d: Display table where trigger is defined, if inherited

  2. Document partitiong tables ancillary object handling some more

  3. Fix detaching partitions with cloned row triggers