hi.
+ /* Copy data from merged partitions to new partition. */
+ moveMergedTablesRows(rel, mergingPartitionsList, newPartRel);
+
+ /* Drop the current partitions before attaching the new one. */
+ foreach_ptr(RelationData, mergingPartition, mergingPartitionsList)
+ {
+ ObjectAddress object;
+
+ /* Get relation id before table_close() call. */
+ object.objectId = RelationGetRelid(mergingPartition);
+ object.classId = RelationRelationId;
+ object.objectSubId = 0;
+
+ /* Keep the lock until commit. */
+ table_close(mergingPartition, NoLock);
+
+ performDeletion(&object, DROP_RESTRICT, 0);
+ }
+ list_free(mergingPartitionsList);
In here, should performDeletion last flags have PERFORM_DELETION_INTERNAL?also this is not ideal, imagine you first did all the main work in moveMergedTablesRows, then suddenly error out, saying: ERROR: cannot drop table public.pk_1 because other objects depend on it DETAIL: view public.v1 depends on table public.pk_1 HINT: Use DROP ... CASCADE to drop the dependent objects too. (this errhint, seems not ideal in this context) We can perform a preliminary check to determine whether dropping a partition is allowed, and raise an error if it's not. To do it, I invented a new function, performDeletionCheck to verify whether an object can be safely dropped. please check attached, it was based on v43.
v43-0001-check-if-we-can-drop-merging-partition-before-actuall.no-cfbot
Description: Binary data
