Skip to content

Commit fc069f5

Browse files
committed
pathman: append and prepend functions return value
1 parent 3018919 commit fc069f5

File tree

3 files changed

+54
-31
lines changed

3 files changed

+54
-31
lines changed

contrib/pg_pathman/expected/pg_pathman.out

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -386,33 +386,33 @@ NOTICE: Done!
386386
SELECT pathman.append_partition('test.num_range_rel');
387387
NOTICE: Appending new partition...
388388
NOTICE: Done!
389-
append_partition
390-
------------------
391-
389+
append_partition
390+
----------------------
391+
test.num_range_rel_6
392392
(1 row)
393393

394394
SELECT pathman.prepend_partition('test.num_range_rel');
395395
NOTICE: Prepending new partition...
396396
NOTICE: Done!
397-
prepend_partition
398-
-------------------
399-
397+
prepend_partition
398+
----------------------
399+
test.num_range_rel_7
400400
(1 row)
401401

402402
SELECT pathman.append_partition('test.range_rel');
403403
NOTICE: Appending new partition...
404404
NOTICE: Done!
405405
append_partition
406406
------------------
407-
407+
test.range_rel_6
408408
(1 row)
409409

410410
SELECT pathman.prepend_partition('test.range_rel');
411411
NOTICE: Prepending new partition...
412412
NOTICE: Done!
413413
prepend_partition
414414
-------------------
415-
415+
test.range_rel_7
416416
(1 row)
417417

418418
/*
@@ -590,17 +590,17 @@ NOTICE: Done!
590590
SELECT append_partition('range_rel');
591591
NOTICE: Appending new partition...
592592
NOTICE: Done!
593-
append_partition
594-
------------------
595-
593+
append_partition
594+
---------------------
595+
public.range_rel_14
596596
(1 row)
597597

598598
SELECT prepend_partition('range_rel');
599599
NOTICE: Prepending new partition...
600600
NOTICE: Done!
601-
prepend_partition
602-
-------------------
603-
601+
prepend_partition
602+
---------------------
603+
public.range_rel_15
604604
(1 row)
605605

606606
EXPLAIN (COSTS OFF) SELECT * FROM range_rel WHERE dt < '2010-03-01';

contrib/pg_pathman/sql/hash.sql

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,20 @@ CREATE OR REPLACE FUNCTION @extschema@.create_hash_partitions(
77
, partitions_count INTEGER
88
) RETURNS INTEGER AS
99
$$
10+
DECLARE
11+
v_type TEXT;
1012
BEGIN
1113
relation := @extschema@.validate_relname(relation);
14+
v_type := @extschema@.get_attribute_type_name(relation, attribute);
1215

1316
IF EXISTS (SELECT * FROM @extschema@.pathman_config WHERE relname = relation) THEN
1417
RAISE EXCEPTION 'Relation "%" has already been partitioned', relation;
1518
END IF;
1619

20+
IF v_type::regtype != 'integer'::regtype THEN
21+
RAISE EXCEPTION 'Attribute type must be INTEGER';
22+
END IF;
23+
1724
/* Create partitions and update pg_pathman configuration */
1825
FOR partnum IN 0..partitions_count-1
1926
LOOP

contrib/pg_pathman/sql/range.sql

Lines changed: 33 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -469,40 +469,48 @@ $$ LANGUAGE plpgsql;
469469
/*
470470
* Append new partition
471471
*/
472-
CREATE OR REPLACE FUNCTION @extschema@.append_partition(p_relation TEXT)
473-
RETURNS VOID AS
472+
CREATE OR REPLACE FUNCTION @extschema@.append_partition(
473+
p_relation TEXT)
474+
RETURNS TEXT AS
474475
$$
475476
DECLARE
476477
v_attname TEXT;
477478
v_atttype TEXT;
479+
v_part_name TEXT;
478480
BEGIN
479481
p_relation := @extschema@.validate_relname(p_relation);
480482

481483
v_attname := attname FROM @extschema@.pathman_config WHERE relname = p_relation;
482484
v_atttype := @extschema@.get_attribute_type_name(p_relation, v_attname);
483-
EXECUTE format('SELECT @extschema@.append_partition_internal($1, NULL::%s)', v_atttype)
485+
EXECUTE format('SELECT @extschema@.append_partition_internal($1, ARRAY[]::%s[])'
486+
, v_atttype)
487+
INTO v_part_name
484488
USING p_relation;
489+
490+
RETURN v_part_name;
485491
END
486492
$$
487493
LANGUAGE plpgsql;
488494

489495

490496
CREATE OR REPLACE FUNCTION @extschema@.append_partition_internal(
491497
p_relation TEXT
492-
, dummy ANYELEMENT
493-
, OUT p_range ANYARRAY)
494-
RETURNS ANYARRAY AS
498+
, p_range ANYARRAY DEFAULT NULL)
499+
RETURNS TEXT AS
495500
$$
501+
DECLARE
502+
v_part_name TEXT;
496503
BEGIN
497504
p_range := @extschema@.get_range_by_idx(p_relation::regclass::oid, -1, 0);
498505
RAISE NOTICE 'Appending new partition...';
499-
PERFORM @extschema@.create_single_range_partition(p_relation
500-
, p_range[2]
501-
, p_range[2] + (p_range[2] - p_range[1]));
506+
v_part_name := @extschema@.create_single_range_partition(p_relation
507+
, p_range[2]
508+
, p_range[2] + (p_range[2] - p_range[1]));
502509

503510
/* Tell backend to reload configuration */
504511
PERFORM @extschema@.on_create_partitions(p_relation::regclass::oid);
505512
RAISE NOTICE 'Done!';
513+
RETURN v_part_name;
506514
END
507515
$$
508516
LANGUAGE plpgsql;
@@ -512,39 +520,47 @@ LANGUAGE plpgsql;
512520
* Append new partition
513521
*/
514522
CREATE OR REPLACE FUNCTION @extschema@.prepend_partition(p_relation TEXT)
515-
RETURNS VOID AS
523+
RETURNS TEXT AS
516524
$$
517525
DECLARE
518526
v_attname TEXT;
519527
v_atttype TEXT;
528+
v_part_name TEXT;
520529
BEGIN
521530
p_relation := @extschema@.validate_relname(p_relation);
522531

523532
v_attname := attname FROM @extschema@.pathman_config WHERE relname = p_relation;
524533
v_atttype := @extschema@.get_attribute_type_name(p_relation, v_attname);
525-
EXECUTE format('SELECT @extschema@.prepend_partition_internal($1, NULL::%s)', v_atttype)
534+
EXECUTE format('SELECT @extschema@.prepend_partition_internal($1, ARRAY[]::%s[])'
535+
, v_atttype)
536+
INTO v_part_name
526537
USING p_relation;
538+
539+
RETURN v_part_name;
527540
END
528541
$$
529542
LANGUAGE plpgsql;
530543

531544

532545
CREATE OR REPLACE FUNCTION @extschema@.prepend_partition_internal(
533546
p_relation TEXT
534-
, dummy ANYELEMENT
535-
, OUT p_range ANYARRAY)
536-
RETURNS ANYARRAY AS
547+
, p_range ANYARRAY DEFAULT NULL)
548+
RETURNS TEXT AS
537549
$$
550+
DECLARE
551+
v_part_name TEXT;
538552
BEGIN
539553
p_range := @extschema@.get_range_by_idx(p_relation::regclass::oid, 0, 0);
540554
RAISE NOTICE 'Prepending new partition...';
541-
PERFORM @extschema@.create_single_range_partition(p_relation
542-
, p_range[1] - (p_range[2] - p_range[1])
543-
, p_range[1]);
555+
v_part_name := @extschema@.create_single_range_partition(p_relation
556+
, p_range[1] - (p_range[2] - p_range[1])
557+
, p_range[1]);
544558

545559
/* Tell backend to reload configuration */
546560
PERFORM @extschema@.on_create_partitions(p_relation::regclass::oid);
547561
RAISE NOTICE 'Done!';
562+
563+
RETURN v_part_name;
548564
END
549565
$$
550566
LANGUAGE plpgsql;

0 commit comments

Comments
 (0)