@@ -581,23 +581,22 @@ DECLARE
581
581
v_recRECORD;
582
582
v_rowsBIGINT ;
583
583
v_part_countINTEGER := 0 ;
584
- conf_num_del INTEGER ;
584
+ conf_num INTEGER ;
585
585
v_relkindCHAR ;
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_deletedAS (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_paramsWHERE partrel= parent_relid;
596
+ SELECT count (* )FROM @extschema@.pathman_config
597
+ WHERE partrel= parent_relid INTO conf_num;
599
598
600
- IFconf_num_del = 0 THEN
599
+ IFconf_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 eithera regular
624
+ * table (r) ora 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_configWHERE partrel= parent_relid;
638
+ DELETE FROM @extschema@.pathman_config_paramsWHERE partrel= parent_relid;
639
+
637
640
RETURN v_part_count;
638
641
END
639
642
$$ LANGUAGE plpgsql