97
97
/* Acquire exclusive lock on parent*/
98
98
PERFORM @extschema@.lock_partitioned_relation(parent_relid);
99
99
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
+
100
108
PERFORM @extschema@.validate_relname(parent_relid);
101
109
p_attribute := lower (p_attribute);
102
110
PERFORM @extschema@.common_relation_checks(parent_relid, p_attribute);
@@ -166,9 +174,6 @@ BEGIN
166
174
END IF;
167
175
168
176
RETURN p_count;
169
-
170
- EXCEPTION WHEN others THEN
171
- RAISE EXCEPTION' %' , SQLERRM;
172
177
END
173
178
$$ LANGUAGE plpgsql;
174
179
@@ -194,6 +199,14 @@ BEGIN
194
199
/* Acquire exclusive lock on parent*/
195
200
PERFORM @extschema@.lock_partitioned_relation(parent_relid);
196
201
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
+
197
210
PERFORM @extschema@.validate_relname(parent_relid);
198
211
p_attribute := lower (p_attribute);
199
212
PERFORM @extschema@.common_relation_checks(parent_relid, p_attribute);
@@ -264,9 +277,6 @@ BEGIN
264
277
END IF;
265
278
266
279
RETURN p_count;
267
-
268
- EXCEPTION WHEN others THEN
269
- RAISE EXCEPTION' %' , SQLERRM;
270
280
END
271
281
$$ LANGUAGE plpgsql;
272
282
@@ -289,6 +299,14 @@ BEGIN
289
299
/* Acquire exclusive lock on parent*/
290
300
PERFORM @extschema@.lock_partitioned_relation(parent_relid);
291
301
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
+
292
310
PERFORM @extschema@.validate_relname(parent_relid);
293
311
p_attribute := lower (p_attribute);
294
312
PERFORM @extschema@.common_relation_checks(parent_relid, p_attribute);
@@ -332,9 +350,6 @@ BEGIN
332
350
END IF;
333
351
334
352
RETURN part_count;/* number of created partitions*/
335
-
336
- EXCEPTION WHEN others THEN
337
- RAISE EXCEPTION' %' , SQLERRM;
338
353
END
339
354
$$ LANGUAGE plpgsql;
340
355
@@ -357,6 +372,14 @@ BEGIN
357
372
/* Acquire exclusive lock on parent*/
358
373
PERFORM @extschema@.lock_partitioned_relation(parent_relid);
359
374
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
+
360
383
PERFORM @extschema@.validate_relname(parent_relid);
361
384
p_attribute := lower (p_attribute);
362
385
PERFORM @extschema@.common_relation_checks(parent_relid, p_attribute);
@@ -397,9 +420,6 @@ BEGIN
397
420
END IF;
398
421
399
422
RETURN part_count;/* number of created partitions*/
400
-
401
- EXCEPTION WHEN others THEN
402
- RAISE EXCEPTION' %' , SQLERRM;
403
423
END
404
424
$$ LANGUAGE plpgsql;
405
425
@@ -501,6 +521,10 @@ BEGIN
501
521
/* Acquire exclusive lock on parent*/
502
522
PERFORM @extschema@.lock_partitioned_relation(v_parent_relid);
503
523
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
+
504
528
SELECT attname, parttype
505
529
FROM @extschema@.pathman_config
506
530
WHERE partrel= v_parent_relid
@@ -585,6 +609,12 @@ BEGIN
585
609
v_parent_relid1 := @extschema@.get_parent_of_partition(partition1);
586
610
v_parent_relid2 := @extschema@.get_parent_of_partition(partition2);
587
611
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
+
588
618
IF v_parent_relid1!= v_parent_relid2 THEN
589
619
RAISE EXCEPTION' Cannot merge partitions with different parents' ;
590
620
END IF;
@@ -730,9 +760,6 @@ BEGIN
730
760
/* Invalidate cache*/
731
761
PERFORM @extschema@.on_update_partitions(parent_relid);
732
762
RETURN v_part_name;
733
-
734
- EXCEPTION WHEN others THEN
735
- RAISE EXCEPTION' %' , SQLERRM;
736
763
END
737
764
$$
738
765
LANGUAGE plpgsql;
@@ -828,9 +855,6 @@ BEGIN
828
855
/* Invalidate cache*/
829
856
PERFORM @extschema@.on_update_partitions(parent_relid);
830
857
RETURN v_part_name;
831
-
832
- EXCEPTION WHEN others THEN
833
- RAISE EXCEPTION' %' , SQLERRM;
834
858
END
835
859
$$
836
860
LANGUAGE plpgsql;
@@ -920,9 +944,6 @@ BEGIN
920
944
PERFORM @extschema@.on_update_partitions(parent_relid);
921
945
922
946
RETURN v_part_name;
923
-
924
- EXCEPTION WHEN others THEN
925
- RAISE EXCEPTION' %' , SQLERRM;
926
947
END
927
948
$$
928
949
LANGUAGE plpgsql;
@@ -953,9 +974,6 @@ BEGIN
953
974
PERFORM @extschema@.on_update_partitions(parent_relid);
954
975
955
976
RETURN part_name;
956
-
957
- EXCEPTION WHEN others THEN
958
- RAISE EXCEPTION' %' , SQLERRM;
959
977
END
960
978
$$
961
979
LANGUAGE plpgsql;
@@ -1017,9 +1035,6 @@ BEGIN
1017
1035
PERFORM @extschema@.on_update_partitions(parent_relid);
1018
1036
1019
1037
RETURN p_partition;
1020
-
1021
- EXCEPTION WHEN others THEN
1022
- RAISE EXCEPTION' %' , SQLERRM;
1023
1038
END
1024
1039
$$
1025
1040
LANGUAGE plpgsql;
@@ -1064,9 +1079,6 @@ BEGIN
1064
1079
PERFORM @extschema@.on_update_partitions(parent_relid);
1065
1080
1066
1081
RETURN p_partition;
1067
-
1068
- EXCEPTION WHEN others THEN
1069
- RAISE EXCEPTION' %' , SQLERRM;
1070
1082
END
1071
1083
$$
1072
1084
LANGUAGE plpgsql;