9797 /* Acquire exclusive lock on parent */
9898 PERFORM @extschema@.lock_partitioned_relation(parent_relid);
9999
100+ IF partition_data = true THEN
101+ /* Perform some checks regarding the blocking partitioning */
102+ PERFORM @extschema@.common_blocking_partitioning_checks(parent_relid);
103+
104+ /* Acquire data modification lock (prevent further modifications) */
105+ PERFORM @extschema@.lock_relation_modification(parent_relid);
106+ END IF;
107+
100108 PERFORM @extschema@.validate_relname(parent_relid);
101109 p_attribute := lower (p_attribute);
102110 PERFORM @extschema@.common_relation_checks(parent_relid, p_attribute);
@@ -166,9 +174,6 @@ BEGIN
166174 END IF;
167175
168176 RETURN p_count;
169-
170- EXCEPTION WHEN others THEN
171- RAISE EXCEPTION ' %' , SQLERRM;
172177END
173178$$ LANGUAGE plpgsql;
174179
@@ -194,6 +199,14 @@ BEGIN
194199 /* Acquire exclusive lock on parent */
195200 PERFORM @extschema@.lock_partitioned_relation(parent_relid);
196201
202+ IF partition_data = true THEN
203+ /* Perform some checks regarding the blocking partitioning */
204+ PERFORM @extschema@.common_blocking_partitioning_checks(parent_relid);
205+
206+ /* Acquire data modification lock (prevent further modifications) */
207+ PERFORM @extschema@.lock_relation_modification(parent_relid);
208+ END IF;
209+
197210 PERFORM @extschema@.validate_relname(parent_relid);
198211 p_attribute := lower (p_attribute);
199212 PERFORM @extschema@.common_relation_checks(parent_relid, p_attribute);
@@ -264,9 +277,6 @@ BEGIN
264277 END IF;
265278
266279 RETURN p_count;
267-
268- EXCEPTION WHEN others THEN
269- RAISE EXCEPTION ' %' , SQLERRM;
270280END
271281$$ LANGUAGE plpgsql;
272282
@@ -289,6 +299,14 @@ BEGIN
289299 /* Acquire exclusive lock on parent */
290300 PERFORM @extschema@.lock_partitioned_relation(parent_relid);
291301
302+ IF partition_data = true THEN
303+ /* Perform some checks regarding the blocking partitioning */
304+ PERFORM @extschema@.common_blocking_partitioning_checks(parent_relid);
305+
306+ /* Acquire data modification lock (prevent further modifications) */
307+ PERFORM @extschema@.lock_relation_modification(parent_relid);
308+ END IF;
309+
292310 PERFORM @extschema@.validate_relname(parent_relid);
293311 p_attribute := lower (p_attribute);
294312 PERFORM @extschema@.common_relation_checks(parent_relid, p_attribute);
@@ -332,9 +350,6 @@ BEGIN
332350 END IF;
333351
334352 RETURN part_count; /* number of created partitions */
335-
336- EXCEPTION WHEN others THEN
337- RAISE EXCEPTION ' %' , SQLERRM;
338353END
339354$$ LANGUAGE plpgsql;
340355
@@ -357,6 +372,14 @@ BEGIN
357372 /* Acquire exclusive lock on parent */
358373 PERFORM @extschema@.lock_partitioned_relation(parent_relid);
359374
375+ IF partition_data = true THEN
376+ /* Perform some checks regarding the blocking partitioning */
377+ PERFORM @extschema@.common_blocking_partitioning_checks(parent_relid);
378+
379+ /* Acquire data modification lock (prevent further modifications) */
380+ PERFORM @extschema@.lock_relation_modification(parent_relid);
381+ END IF;
382+
360383 PERFORM @extschema@.validate_relname(parent_relid);
361384 p_attribute := lower (p_attribute);
362385 PERFORM @extschema@.common_relation_checks(parent_relid, p_attribute);
@@ -397,9 +420,6 @@ BEGIN
397420 END IF;
398421
399422 RETURN part_count; /* number of created partitions */
400-
401- EXCEPTION WHEN others THEN
402- RAISE EXCEPTION ' %' , SQLERRM;
403423END
404424$$ LANGUAGE plpgsql;
405425
@@ -501,6 +521,10 @@ BEGIN
501521 /* Acquire exclusive lock on parent */
502522 PERFORM @extschema@.lock_partitioned_relation(v_parent_relid);
503523
524+ /* Acquire data modification lock (prevent further modifications) */
525+ PERFORM @extschema@.common_blocking_partitioning_checks(p_partition);
526+ PERFORM @extschema@.lock_relation_modification(p_partition);
527+
504528 SELECT attname, parttype
505529 FROM @extschema@.pathman_config
506530 WHERE partrel = v_parent_relid
@@ -585,6 +609,12 @@ BEGIN
585609 v_parent_relid1 := @extschema@.get_parent_of_partition(partition1);
586610 v_parent_relid2 := @extschema@.get_parent_of_partition(partition2);
587611
612+ /* Acquire data modification locks (prevent further modifications) */
613+ PERFORM @extschema@.common_blocking_partitioning_checks(partition1);
614+ PERFORM @extschema@.lock_relation_modification(partition1);
615+ PERFORM @extschema@.common_blocking_partitioning_checks(partition2);
616+ PERFORM @extschema@.lock_relation_modification(partition2);
617+
588618 IF v_parent_relid1 != v_parent_relid2 THEN
589619 RAISE EXCEPTION ' Cannot merge partitions with different parents' ;
590620 END IF;
@@ -730,9 +760,6 @@ BEGIN
730760 /* Invalidate cache */
731761 PERFORM @extschema@.on_update_partitions(parent_relid);
732762 RETURN v_part_name;
733-
734- EXCEPTION WHEN others THEN
735- RAISE EXCEPTION ' %' , SQLERRM;
736763END
737764$$
738765LANGUAGE plpgsql;
@@ -828,9 +855,6 @@ BEGIN
828855 /* Invalidate cache */
829856 PERFORM @extschema@.on_update_partitions(parent_relid);
830857 RETURN v_part_name;
831-
832- EXCEPTION WHEN others THEN
833- RAISE EXCEPTION ' %' , SQLERRM;
834858END
835859$$
836860LANGUAGE plpgsql;
@@ -920,9 +944,6 @@ BEGIN
920944 PERFORM @extschema@.on_update_partitions(parent_relid);
921945
922946 RETURN v_part_name;
923-
924- EXCEPTION WHEN others THEN
925- RAISE EXCEPTION ' %' , SQLERRM;
926947END
927948$$
928949LANGUAGE plpgsql;
@@ -953,9 +974,6 @@ BEGIN
953974 PERFORM @extschema@.on_update_partitions(parent_relid);
954975
955976 RETURN part_name;
956-
957- EXCEPTION WHEN others THEN
958- RAISE EXCEPTION ' %' , SQLERRM;
959977END
960978$$
961979LANGUAGE plpgsql;
@@ -1017,9 +1035,6 @@ BEGIN
10171035 PERFORM @extschema@.on_update_partitions(parent_relid);
10181036
10191037 RETURN p_partition;
1020-
1021- EXCEPTION WHEN others THEN
1022- RAISE EXCEPTION ' %' , SQLERRM;
10231038END
10241039$$
10251040LANGUAGE plpgsql;
@@ -1064,9 +1079,6 @@ BEGIN
10641079 PERFORM @extschema@.on_update_partitions(parent_relid);
10651080
10661081 RETURN p_partition;
1067-
1068- EXCEPTION WHEN others THEN
1069- RAISE EXCEPTION ' %' , SQLERRM;
10701082END
10711083$$
10721084LANGUAGE plpgsql;
0 commit comments