@@ -96,12 +96,14 @@ CREATE OR REPLACE FUNCTION @extschema@.create_range_partitions(
96
96
RETURNS INTEGER AS
97
97
$$
98
98
DECLARE
99
- v_rows_count BIGINT ;
100
- v_atttype REGTYPE;
101
- v_max start_value%TYPE;
102
- v_cur_value start_value%TYPE := start_value;
103
- end_value start_value%TYPE;
104
- i INTEGER ;
99
+ v_rows_count BIGINT ;
100
+ v_atttype REGTYPE;
101
+ v_tablespace TEXT ;
102
+ v_max start_value%TYPE;
103
+ v_cur_value start_value%TYPE := start_value;
104
+ end_value start_value%TYPE;
105
+ part_count INTEGER ;
106
+ i INTEGER ;
105
107
106
108
BEGIN
107
109
attribute := lower (attribute);
@@ -159,20 +161,11 @@ BEGIN
159
161
PERFORM @extschema@.create_or_replace_sequence(parent_relid)
160
162
FROM @extschema@.get_plain_schema_and_relname(parent_relid);
161
163
162
- /* Create first partition */
163
- FOR i IN 1 ..p_count
164
- LOOP
165
- EXECUTE
166
- format(' SELECT @extschema@.create_single_range_partition($1, $2, $3::%s, tablespace:=$4)' ,
167
- v_atttype::TEXT )
168
- USING
169
- parent_relid,
170
- start_value,
171
- start_value + p_interval,
172
- @extschema@.get_tablespace(parent_relid);
173
-
174
- start_value := start_value + p_interval;
175
- END LOOP;
164
+ part_count := @extschema@.create_range_partitions_internal(
165
+ parent_relid,
166
+ @extschema@.generate_bounds(start_value, p_interval, p_count),
167
+ NULL ,
168
+ NULL );
176
169
177
170
/* Notify backend about changes */
178
171
PERFORM @extschema@.on_create_partitions(parent_relid);
@@ -185,7 +178,7 @@ BEGIN
185
178
PERFORM @extschema@.set_enable_parent(parent_relid, true);
186
179
END IF;
187
180
188
- RETURN p_count ;
181
+ RETURN part_count ;
189
182
END
190
183
$$ LANGUAGE plpgsql;
191
184
@@ -202,11 +195,12 @@ CREATE OR REPLACE FUNCTION @extschema@.create_range_partitions(
202
195
RETURNS INTEGER AS
203
196
$$
204
197
DECLARE
205
- v_rows_count BIGINT ;
206
- v_max start_value%TYPE;
207
- v_cur_value start_value%TYPE := start_value;
208
- end_value start_value%TYPE;
209
- i INTEGER ;
198
+ v_rows_count BIGINT ;
199
+ v_max start_value%TYPE;
200
+ v_cur_value start_value%TYPE := start_value;
201
+ end_value start_value%TYPE;
202
+ part_count INTEGER ;
203
+ i INTEGER ;
210
204
211
205
BEGIN
212
206
attribute := lower (attribute);
@@ -264,17 +258,11 @@ BEGIN
264
258
PERFORM @extschema@.create_or_replace_sequence(parent_relid)
265
259
FROM @extschema@.get_plain_schema_and_relname(parent_relid);
266
260
267
- /* create first partition */
268
- FOR i IN 1 ..p_count
269
- LOOP
270
- PERFORM @extschema@.create_single_range_partition(
271
- parent_relid,
272
- start_value,
273
- start_value + p_interval,
274
- tablespace := @extschema@.get_tablespace(parent_relid));
275
-
276
- start_value := start_value + p_interval;
277
- END LOOP;
261
+ part_count := @extschema@.create_range_partitions_internal(
262
+ parent_relid,
263
+ @extschema@.generate_bounds(start_value, p_interval, p_count),
264
+ NULL ,
265
+ NULL );
278
266
279
267
/* Notify backend about changes */
280
268
PERFORM @extschema@.on_create_partitions(parent_relid);
@@ -483,6 +471,22 @@ RETURNS REGCLASS AS 'pg_pathman', 'create_range_partitions_internal'
483
471
LANGUAGE C;
484
472
485
473
474
+ CREATE OR REPLACE FUNCTION @extschema@.generate_bounds(
475
+ p_start ANYELEMENT,
476
+ p_interval INTERVAL,
477
+ p_count INTEGER )
478
+ RETURNS ANYARRAY AS ' pg_pathman' , ' generate_bounds'
479
+ LANGUAGE C;
480
+
481
+
482
+ CREATE OR REPLACE FUNCTION @extschema@.generate_bounds(
483
+ p_start ANYELEMENT,
484
+ p_interval ANYELEMENT,
485
+ p_count INTEGER )
486
+ RETURNS ANYARRAY AS ' pg_pathman' , ' generate_bounds'
487
+ LANGUAGE C;
488
+
489
+
486
490
/*
487
491
* Split RANGE partition
488
492
*/
0 commit comments