60
60
END
61
61
$$ LANGUAGE plpgsql;
62
62
63
-
64
- CREATE OR REPLACE FUNCTION @extschema@.prepare_for_partitioning(
65
- parent_relid REGCLASS,
66
- expression TEXT ,
67
- partition_data BOOLEAN )
68
- RETURNS VOID AS
69
- $$
70
- BEGIN
71
- PERFORM @extschema@.validate_relname(parent_relid);
72
-
73
- IF partition_data = true THEN
74
- /* Acquire data modification lock */
75
- PERFORM @extschema@.prevent_relation_modification(parent_relid);
76
- ELSE
77
- /* Acquire lock on parent */
78
- PERFORM @extschema@.lock_partitioned_relation(parent_relid);
79
- END IF;
80
-
81
- expression := lower (expression);
82
- PERFORM @extschema@.common_relation_checks(parent_relid, expression);
83
- END
84
- $$ LANGUAGE plpgsql;
85
-
86
63
/*
87
64
* Creates RANGE partitions for specified relation based on datetime attribute
88
65
*/
@@ -106,7 +83,9 @@ DECLARE
106
83
107
84
BEGIN
108
85
expression := lower (expression);
109
- PERFORM @extschema@.prepare_for_partitioning(parent_relid, expression, partition_data);
86
+ PERFORM @extschema@.prepare_for_partitioning(parent_relid,
87
+ expression,
88
+ partition_data);
110
89
111
90
IF p_count < 0 THEN
112
91
RAISE EXCEPTION ' "p_count" must not be less than 0' ;
@@ -206,7 +185,9 @@ DECLARE
206
185
207
186
BEGIN
208
187
expression := lower (expression);
209
- PERFORM @extschema@.prepare_for_partitioning(parent_relid, expression, partition_data);
188
+ PERFORM @extschema@.prepare_for_partitioning(parent_relid,
189
+ expression,
190
+ partition_data);
210
191
211
192
IF p_count < 0 THEN
212
193
RAISE EXCEPTION ' partitions count must not be less than zero' ;
@@ -307,7 +288,9 @@ BEGIN
307
288
END IF;
308
289
309
290
expression := lower (expression);
310
- PERFORM @extschema@.prepare_for_partitioning(parent_relid, expression, partition_data);
291
+ PERFORM @extschema@.prepare_for_partitioning(parent_relid,
292
+ expression,
293
+ partition_data);
311
294
312
295
/* Check boundaries */
313
296
PERFORM @extschema@.check_boundaries(parent_relid,
@@ -358,7 +341,9 @@ DECLARE
358
341
359
342
BEGIN
360
343
expression := lower (expression);
361
- PERFORM @extschema@.prepare_for_partitioning(parent_relid, expression, partition_data);
344
+ PERFORM @extschema@.prepare_for_partitioning(parent_relid,
345
+ expression,
346
+ partition_data);
362
347
363
348
/* Check boundaries */
364
349
PERFORM @extschema@.check_boundaries(parent_relid,
@@ -415,8 +400,9 @@ DECLARE
415
400
416
401
BEGIN
417
402
expression := lower (expression);
418
- PERFORM @extschema@.prepare_for_partitioning(parent_relid, expression,
419
- partition_data);
403
+ PERFORM @extschema@.prepare_for_partitioning(parent_relid,
404
+ expression,
405
+ partition_data);
420
406
421
407
/* Check boundaries */
422
408
PERFORM @extschema@.check_boundaries(parent_relid,
@@ -483,6 +469,9 @@ DECLARE
483
469
BEGIN
484
470
parent_relid = @extschema@.get_parent_of_partition(partition_relid);
485
471
472
+ PERFORM @extschema@.validate_relname(parent_relid);
473
+ PERFORM @extschema@.validate_relname(partition_relid);
474
+
486
475
/* Acquire lock on parent */
487
476
PERFORM @extschema@.lock_partitioned_relation(parent_relid);
488
477
@@ -839,8 +828,11 @@ DECLARE
839
828
840
829
BEGIN
841
830
parent_relid := @extschema@.get_parent_of_partition(partition_relid);
842
- part_name := partition_relid::TEXT ; /* save the name to be returned */
843
831
832
+ PERFORM @extschema@.validate_relname(parent_relid);
833
+ PERFORM @extschema@.validate_relname(partition_relid);
834
+
835
+ part_name := partition_relid::TEXT ; /* save the name to be returned */
844
836
part_type := @extschema@.get_partition_type(parent_relid);
845
837
846
838
/* Check if this is a RANGE partition */
@@ -972,18 +964,22 @@ RETURNS TEXT AS
972
964
$$
973
965
DECLARE
974
966
parent_relid REGCLASS;
975
- part_expr TEXT ;
967
+ part_type INTEGER ;
976
968
977
969
BEGIN
978
970
parent_relid := @extschema@.get_parent_of_partition(partition_relid);
979
971
972
+ PERFORM @extschema@.validate_relname(parent_relid);
973
+ PERFORM @extschema@.validate_relname(partition_relid);
974
+
980
975
/* Acquire lock on parent */
981
976
PERFORM @extschema@.prevent_relation_modification(parent_relid);
982
977
983
- part_expr := @extschema@.get_partition_key (parent_relid);
978
+ part_type := @extschema@.get_partition_type (parent_relid);
984
979
985
- IF part_expr IS NULL THEN
986
- RAISE EXCEPTION ' table "%" is not partitioned' , parent_relid::TEXT ;
980
+ /* Check if this is a RANGE partition */
981
+ IF part_type != 2 THEN
982
+ RAISE EXCEPTION ' "%" is not a RANGE partition' , partition_relid::TEXT ;
987
983
END IF;
988
984
989
985
/* Remove inheritance */
0 commit comments