@@ -581,23 +581,22 @@ DECLARE
581
581
v_rec RECORD;
582
582
v_rows BIGINT ;
583
583
v_part_count INTEGER := 0 ;
584
- conf_num_del INTEGER ;
584
+ conf_num INTEGER ;
585
585
v_relkind CHAR ;
586
586
587
587
BEGIN
588
588
PERFORM @extschema@.validate_relname(parent_relid);
589
589
590
- /* Drop trigger first */
591
- PERFORM @extschema@.drop_triggers (parent_relid);
590
+ /* Acquire data modification lock */
591
+ PERFORM @extschema@.prevent_relation_modification (parent_relid);
592
592
593
- WITH config_num_deleted AS (DELETE FROM @extschema@.pathman_config
594
- WHERE partrel = parent_relid
595
- RETURNING * )
596
- SELECT count (* ) from config_num_deleted INTO conf_num_del;
593
+ /* First, drop all triggers */
594
+ PERFORM @extschema@.drop_triggers(parent_relid);
597
595
598
- DELETE FROM @extschema@.pathman_config_params WHERE partrel = parent_relid;
596
+ SELECT count (* ) FROM @extschema@.pathman_config
597
+ WHERE partrel = parent_relid INTO conf_num;
599
598
600
- IF conf_num_del = 0 THEN
599
+ IF conf_num = 0 THEN
601
600
RAISE EXCEPTION ' relation "%" has no partitions' , parent_relid::TEXT ;
602
601
END IF;
603
602
@@ -621,8 +620,8 @@ BEGIN
621
620
INTO v_relkind;
622
621
623
622
/*
624
- * Determine the kind of child relation. It can be either regular
625
- * table (r) or foreign table (f). Depending on relkind we use
623
+ * Determine the kind of child relation. It can be either a regular
624
+ * table (r) or a foreign table (f). Depending on relkind we use
626
625
* DROP TABLE or DROP FOREIGN TABLE.
627
626
*/
628
627
IF v_relkind = ' f' THEN
@@ -634,6 +633,10 @@ BEGIN
634
633
v_part_count := v_part_count + 1 ;
635
634
END LOOP;
636
635
636
+ /* Finally delete both config entries */
637
+ DELETE FROM @extschema@.pathman_config WHERE partrel = parent_relid;
638
+ DELETE FROM @extschema@.pathman_config_params WHERE partrel = parent_relid;
639
+
637
640
RETURN v_part_count;
638
641
END
639
642
$$ LANGUAGE plpgsql
0 commit comments