Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit7345c79

Browse files
committed
pathman: prepending issue
1 parentbe7afb2 commit7345c79

File tree

3 files changed

+48
-33
lines changed

3 files changed

+48
-33
lines changed

‎contrib/pg_pathman/expected/pg_pathman.out

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -632,6 +632,13 @@ NOTICE: Done!
632632
test.num_range_rel_6
633633
(1 row)
634634

635+
EXPLAIN (COSTS OFF) SELECT * FROM test.num_range_rel WHERE id >= 4000;
636+
QUERY PLAN
637+
-----------------------------------
638+
Append
639+
-> Seq Scan on num_range_rel_6
640+
(2 rows)
641+
635642
SELECT pathman.prepend_range_partition('test.num_range_rel');
636643
NOTICE: Prepending new partition...
637644
NOTICE: Done!
@@ -640,6 +647,13 @@ NOTICE: Done!
640647
test.num_range_rel_7
641648
(1 row)
642649

650+
EXPLAIN (COSTS OFF) SELECT * FROM test.num_range_rel WHERE id < 0;
651+
QUERY PLAN
652+
-----------------------------------
653+
Append
654+
-> Seq Scan on num_range_rel_7
655+
(2 rows)
656+
643657
SELECT pathman.drop_range_partition('test.num_range_rel_7');
644658
drop_range_partition
645659
----------------------

‎contrib/pg_pathman/range.sql

Lines changed: 32 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -690,7 +690,7 @@ $$ LANGUAGE plpgsql;
690690
* Append new partition
691691
*/
692692
CREATEOR REPLACE FUNCTION @extschema@.append_range_partition(
693-
p_relationTEXT)
693+
p_relationREGCLASS)
694694
RETURNSTEXTAS
695695
$$
696696
DECLARE
@@ -699,10 +699,8 @@ DECLARE
699699
v_part_nameTEXT;
700700
v_intervalTEXT;
701701
BEGIN
702-
p_relation := @extschema@.validate_relname(p_relation);
703-
704702
SELECT attname, range_interval INTO v_attname, v_interval
705-
FROM @extschema@.pathman_configWHERE relname= p_relation;
703+
FROM @extschema@.pathman_configWHERE relname::regclass= p_relation;
706704

707705
v_atttype := @extschema@.get_attribute_type_name(p_relation, v_attname);
708706

@@ -714,7 +712,7 @@ BEGIN
714712
USING p_relation, v_atttype, v_interval;
715713

716714
/* Invalidate cache*/
717-
PERFORM @extschema@.on_update_partitions(p_relation::regclass::oid);
715+
PERFORM @extschema@.on_update_partitions(p_relation::oid);
718716

719717
/* Release lock*/
720718
PERFORM @extschema@.release_partitions_lock();
@@ -731,7 +729,7 @@ LANGUAGE plpgsql;
731729

732730

733731
CREATEOR REPLACE FUNCTION @extschema@.append_partition_internal(
734-
p_relationTEXT
732+
p_relationREGCLASS
735733
, p_atttypeTEXT
736734
, p_intervalTEXT
737735
, p_range ANYARRAY DEFAULTNULL)
@@ -740,7 +738,7 @@ $$
740738
DECLARE
741739
v_part_nameTEXT;
742740
BEGIN
743-
p_range := @extschema@.get_range_by_idx(p_relation::regclass::oid,-1,0);
741+
p_range := @extschema@.get_range_by_idx(p_relation::oid,-1,0);
744742
RAISE NOTICE'Appending new partition...';
745743
IF @extschema@.is_date(p_atttype::regtype) THEN
746744
v_part_name := @extschema@.create_single_range_partition(p_relation
@@ -761,7 +759,7 @@ LANGUAGE plpgsql;
761759
/*
762760
* Prepend new partition
763761
*/
764-
CREATEOR REPLACE FUNCTION @extschema@.prepend_range_partition(p_relationTEXT)
762+
CREATEOR REPLACE FUNCTION @extschema@.prepend_range_partition(p_relationREGCLASS)
765763
RETURNSTEXTAS
766764
$$
767765
DECLARE
@@ -770,10 +768,8 @@ DECLARE
770768
v_part_nameTEXT;
771769
v_intervalTEXT;
772770
BEGIN
773-
p_relation := @extschema@.validate_relname(p_relation);
774-
775771
SELECT attname, range_interval INTO v_attname, v_interval
776-
FROM @extschema@.pathman_configWHERE relname= p_relation;
772+
FROM @extschema@.pathman_configWHERE relname::regclass= p_relation;
777773
v_atttype := @extschema@.get_attribute_type_name(p_relation, v_attname);
778774

779775
/* Prevent concurrent partition creation*/
@@ -784,7 +780,7 @@ BEGIN
784780
USING p_relation, v_atttype, v_interval;
785781

786782
/* Invalidate cache*/
787-
PERFORM @extschema@.on_update_partitions(p_relation::regclass::oid);
783+
PERFORM @extschema@.on_update_partitions(p_relation::oid);
788784

789785
/* Release lock*/
790786
PERFORM @extschema@.release_partitions_lock();
@@ -801,7 +797,7 @@ LANGUAGE plpgsql;
801797

802798

803799
CREATEOR REPLACE FUNCTION @extschema@.prepend_partition_internal(
804-
p_relationTEXT
800+
p_relationREGCLASS
805801
, p_atttypeTEXT
806802
, p_intervalTEXT
807803
, p_range ANYARRAY DEFAULTNULL)
@@ -810,15 +806,15 @@ $$
810806
DECLARE
811807
v_part_nameTEXT;
812808
BEGIN
813-
p_range := @extschema@.get_range_by_idx(p_relation::regclass::oid,0,0);
809+
p_range := @extschema@.get_range_by_idx(p_relation::oid,0,0);
814810
RAISE NOTICE'Prepending new partition...';
815811

816812
IF @extschema@.is_date(p_atttype::regtype) THEN
817813
v_part_name := @extschema@.create_single_range_partition(p_relation
818814
, p_range[1]- p_interval::interval
819815
, p_range[1]);
820816
ELSE
821-
EXECUTE format('SELECT @extschema@.create_single_range_partition($1, $2, $2- $3::%s)', p_atttype)
817+
EXECUTE format('SELECT @extschema@.create_single_range_partition($1, $2- $3::%s, $2)', p_atttype)
822818
USING p_relation, p_range[1], p_interval
823819
INTO v_part_name;
824820
END IF;
@@ -833,7 +829,7 @@ LANGUAGE plpgsql;
833829
* Add new partition
834830
*/
835831
CREATEOR REPLACE FUNCTION @extschema@.add_range_partition(
836-
p_relationTEXT
832+
p_relationREGCLASS
837833
, p_start_value ANYELEMENT
838834
, p_end_value ANYELEMENT)
839835
RETURNSTEXTAS
@@ -844,10 +840,8 @@ BEGIN
844840
/* Prevent concurrent partition creation*/
845841
PERFORM @extschema@.acquire_partitions_lock();
846842

847-
p_relation := @extschema@.validate_relname(p_relation);
848-
849843
/* check range overlap*/
850-
IF @extschema@.check_overlap(p_relation::regclass::oid, p_start_value, p_end_value)!= FALSE THEN
844+
IF @extschema@.check_overlap(p_relation::oid, p_start_value, p_end_value)!= FALSE THEN
851845
RAISE EXCEPTION'Specified range overlaps with existing partitions';
852846
END IF;
853847

@@ -857,7 +851,7 @@ BEGIN
857851

858852
/* Create new partition*/
859853
v_part_name := @extschema@.create_single_range_partition(p_relation, p_start_value, p_end_value);
860-
PERFORM @extschema@.on_update_partitions(p_relation::regclass::oid);
854+
PERFORM @extschema@.on_update_partitions(p_relation::oid);
861855

862856
/* Release lock*/
863857
PERFORM @extschema@.release_partitions_lock();
@@ -917,26 +911,27 @@ LANGUAGE plpgsql;
917911
* Attach range partition
918912
*/
919913
CREATEOR REPLACE FUNCTION @extschema@.attach_range_partition(
920-
p_relationTEXT
921-
, p_partitionTEXT
922-
, p_start_value ANYELEMENT
923-
, p_end_value ANYELEMENT)
914+
p_relation REGCLASS
915+
, p_partition REGCLASS
916+
, p_start_valueANYELEMENT
917+
, p_end_valueANYELEMENT)
924918
RETURNSTEXTAS
925919
$$
926920
DECLARE
927-
v_attnameTEXT;
928-
v_condTEXT;
921+
v_attnameTEXT;
922+
v_condTEXT;
923+
v_plain_partnameTEXT;
924+
v_plain_schemaTEXT;
929925
BEGIN
930926
/* Prevent concurrent partition management*/
931927
PERFORM @extschema@.acquire_partitions_lock();
932928

933-
p_relation := @extschema@.validate_relname(p_relation);
934929

935-
IF @extschema@.check_overlap(p_relation::regclass::oid, p_start_value, p_end_value)!= FALSE THEN
930+
IF @extschema@.check_overlap(p_relation::oid, p_start_value, p_end_value)!= FALSE THEN
936931
RAISE EXCEPTION'Specified range overlaps with existing partitions';
937932
END IF;
938933

939-
IF NOT @extschema@.validate_relations_equality(p_relation::regclass, p_partition::regclass) THEN
934+
IF NOT @extschema@.validate_relations_equality(p_relation, p_partition) THEN
940935
RAISE EXCEPTION'Partition must have the exact same structure as parent';
941936
END IF;
942937

@@ -946,15 +941,19 @@ BEGIN
946941
, p_relation);
947942

948943
/* Set check constraint*/
949-
v_attname := attnameFROM @extschema@.pathman_configWHERE relname= p_relation;
944+
v_attname := attnameFROM @extschema@.pathman_configWHERE relname::regclass= p_relation;
950945
v_cond := @extschema@.get_range_condition(v_attname, p_start_value, p_end_value);
951-
EXECUTE format('ALTER TABLE %s ADD CONSTRAINT %s_check CHECK (%s)'
946+
947+
/* Plain partition name and schema*/
948+
SELECT* INTO v_plain_schema, v_plain_partnameFROM @extschema@.get_plain_schema_and_relname(p_partition);
949+
950+
EXECUTE format('ALTER TABLE %s ADD CONSTRAINT %s CHECK (%s)'
952951
, p_partition
953-
,@extschema@.get_schema_qualified_name(p_partition::regclass)
952+
,v_plain_schema||'_'|| quote_ident(v_plain_partname||'_check')
954953
, v_cond);
955954

956955
/* Invalidate cache*/
957-
PERFORM @extschema@.on_update_partitions(p_relation::regclass::oid);
956+
PERFORM @extschema@.on_update_partitions(p_relation::oid);
958957

959958
/* Release lock*/
960959
PERFORM @extschema@.release_partitions_lock();

‎contrib/pg_pathman/sql/pg_pathman.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,9 @@ SELECT pathman.merge_range_partitions('test.range_rel_1', 'test.range_rel_' || c
155155

156156
/* Append and prepend partitions*/
157157
SELECTpathman.append_range_partition('test.num_range_rel');
158+
EXPLAIN (COSTS OFF)SELECT*FROMtest.num_range_relWHERE id>=4000;
158159
SELECTpathman.prepend_range_partition('test.num_range_rel');
160+
EXPLAIN (COSTS OFF)SELECT*FROMtest.num_range_relWHERE id<0;
159161
SELECTpathman.drop_range_partition('test.num_range_rel_7');
160162

161163
SELECTpathman.append_range_partition('test.range_rel');

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp