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

Commit4da3edc

Browse files
committed
Merge branch 'rel_1_3_beta' of github.com:postgrespro/pg_pathman into rel_1_3_beta
2 parentsb2c4f8e +3a6d8a6 commit4da3edc

File tree

5 files changed

+242
-8
lines changed

5 files changed

+242
-8
lines changed

‎expected/pathman_calamity.out

Lines changed: 51 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,56 @@ SELECT count(*) FROM pathman_config_params WHERE partrel = 'calamity.to_be_disab
617617
0
618618
(1 row)
619619

620+
/* check function get_part_range_by_idx() */
621+
CREATE TABLE calamity.test_range_idx(val INT4 NOT NULL);
622+
SELECT create_range_partitions('calamity.test_range_idx', 'val', 1, 10, 1);
623+
NOTICE: sequence "test_range_idx_seq" does not exist, skipping
624+
create_range_partitions
625+
-------------------------
626+
1
627+
(1 row)
628+
629+
SELECT get_part_range(NULL, 1, NULL::INT4);/* not ok */
630+
ERROR: 'parent_relid' should not be NULL
631+
SELECT get_part_range('calamity.test_range_idx', NULL, NULL::INT4);/* not ok */
632+
ERROR: 'partition_idx' should not be NULL
633+
SELECT get_part_range('calamity.test_range_idx', 0, NULL::INT2);/* not ok */
634+
ERROR: pg_typeof(dummy) should be integer
635+
SELECT get_part_range('calamity.test_range_idx', -2, NULL::INT4);/* not ok */
636+
ERROR: negative indices other than -1 (last partition) are not allowed
637+
SELECT get_part_range('calamity.test_range_idx', 4, NULL::INT4);/* not ok */
638+
ERROR: partition #4 does not exist (total amount is 1)
639+
SELECT get_part_range('calamity.test_range_idx', 0, NULL::INT4);/* OK */
640+
get_part_range
641+
----------------
642+
{1,11}
643+
(1 row)
644+
645+
DROP TABLE calamity.test_range_idx CASCADE;
646+
NOTICE: drop cascades to table calamity.test_range_idx_1
647+
/* check function get_part_range_by_oid() */
648+
CREATE TABLE calamity.test_range_oid(val INT4 NOT NULL);
649+
SELECT create_range_partitions('calamity.test_range_oid', 'val', 1, 10, 1);
650+
NOTICE: sequence "test_range_oid_seq" does not exist, skipping
651+
create_range_partitions
652+
-------------------------
653+
1
654+
(1 row)
655+
656+
SELECT get_part_range(NULL, NULL::INT4);/* not ok */
657+
ERROR: 'partition_relid' should not be NULL
658+
SELECT get_part_range('pg_class', NULL::INT4);/* not ok */
659+
ERROR: relation "pg_class" is not a partition
660+
SELECT get_part_range('calamity.test_range_oid_1', NULL::INT2);/* not ok */
661+
ERROR: pg_typeof(dummy) should be integer
662+
SELECT get_part_range('calamity.test_range_oid_1', NULL::INT4);/* OK */
663+
get_part_range
664+
----------------
665+
{1,11}
666+
(1 row)
667+
668+
DROP TABLE calamity.test_range_oid CASCADE;
669+
NOTICE: drop cascades to table calamity.test_range_oid_1
620670
DROP SCHEMA calamity CASCADE;
621-
NOTICE: drop cascades to16 other objects
671+
NOTICE: drop cascades to18 other objects
622672
DROP EXTENSION pg_pathman;

‎expected/pathman_interval.out

Lines changed: 89 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,102 @@
11
\set VERBOSITY terse
22
CREATE EXTENSION pg_pathman;
33
CREATE SCHEMA test_interval;
4-
/* Range partitions forINTEGER type */
5-
CREATE TABLE test_interval.abc (idSERIAL);
4+
/* Range partitions forINT2 type */
5+
CREATE TABLE test_interval.abc (idINT2 NOT NULL);
66
SELECT create_range_partitions('test_interval.abc', 'id', 0, 100, 2);
77
NOTICE: sequence "abc_seq" does not exist, skipping
88
create_range_partitions
99
-------------------------
1010
2
1111
(1 row)
1212

13-
SELECT set_interval('test_interval.abc', NULL::INTEGER);
13+
SELECT set_interval('test_interval.abc', NULL::INT2);
14+
set_interval
15+
--------------
16+
17+
(1 row)
18+
19+
/* pg_pathman shouldn't be able to create a new partition */
20+
INSERT INTO test_interval.abc VALUES (250);
21+
ERROR: cannot find appropriate partition for key '250'
22+
/* Set a trivial interval */
23+
SELECT set_interval('test_interval.abc', 0);
24+
ERROR: interval must not be trivial
25+
/* Set a negative interval */
26+
SELECT set_interval('test_interval.abc', -100);
27+
ERROR: interval must not be negative
28+
/* We also shouldn't be able to set a trivial interval directly */
29+
UPDATE pathman_config SET range_interval = '0'
30+
WHERE partrel = 'test_interval.abc'::REGCLASS;
31+
ERROR: interval must not be trivial
32+
/* Set a normal interval */
33+
SELECT set_interval('test_interval.abc', 1000);
34+
set_interval
35+
--------------
36+
37+
(1 row)
38+
39+
INSERT INTO test_interval.abc VALUES (250);
40+
SELECT * FROM pathman_config;
41+
partrel | attname | parttype | range_interval
42+
-------------------+---------+----------+----------------
43+
test_interval.abc | id | 2 | 1000
44+
(1 row)
45+
46+
DROP TABLE test_interval.abc CASCADE;
47+
NOTICE: drop cascades to 3 other objects
48+
/* Range partitions for INT4 type */
49+
CREATE TABLE test_interval.abc (id INT4 NOT NULL);
50+
SELECT create_range_partitions('test_interval.abc', 'id', 0, 100, 2);
51+
create_range_partitions
52+
-------------------------
53+
2
54+
(1 row)
55+
56+
SELECT set_interval('test_interval.abc', NULL::INT4);
57+
set_interval
58+
--------------
59+
60+
(1 row)
61+
62+
/* pg_pathman shouldn't be able to create a new partition */
63+
INSERT INTO test_interval.abc VALUES (250);
64+
ERROR: cannot find appropriate partition for key '250'
65+
/* Set a trivial interval */
66+
SELECT set_interval('test_interval.abc', 0);
67+
ERROR: interval must not be trivial
68+
/* Set a negative interval */
69+
SELECT set_interval('test_interval.abc', -100);
70+
ERROR: interval must not be negative
71+
/* We also shouldn't be able to set a trivial interval directly */
72+
UPDATE pathman_config SET range_interval = '0'
73+
WHERE partrel = 'test_interval.abc'::REGCLASS;
74+
ERROR: interval must not be trivial
75+
/* Set a normal interval */
76+
SELECT set_interval('test_interval.abc', 1000);
77+
set_interval
78+
--------------
79+
80+
(1 row)
81+
82+
INSERT INTO test_interval.abc VALUES (250);
83+
SELECT * FROM pathman_config;
84+
partrel | attname | parttype | range_interval
85+
-------------------+---------+----------+----------------
86+
test_interval.abc | id | 2 | 1000
87+
(1 row)
88+
89+
DROP TABLE test_interval.abc CASCADE;
90+
NOTICE: drop cascades to 3 other objects
91+
/* Range partitions for INT8 type */
92+
CREATE TABLE test_interval.abc (id INT8 NOT NULL);
93+
SELECT create_range_partitions('test_interval.abc', 'id', 0, 100, 2);
94+
create_range_partitions
95+
-------------------------
96+
2
97+
(1 row)
98+
99+
SELECT set_interval('test_interval.abc', NULL::INT8);
14100
set_interval
15101
--------------
16102

‎sql/pathman_calamity.sql

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,5 +235,32 @@ SELECT count(*) FROM pathman_config WHERE partrel = 'calamity.to_be_disabled'::R
235235
SELECTcount(*)FROM pathman_config_paramsWHERE partrel='calamity.to_be_disabled'::REGCLASS;
236236

237237

238+
/* check function get_part_range_by_idx()*/
239+
CREATETABLEcalamity.test_range_idx(val INT4NOT NULL);
240+
SELECT create_range_partitions('calamity.test_range_idx','val',1,10,1);
241+
242+
SELECT get_part_range(NULL,1,NULL::INT4);/* not ok*/
243+
SELECT get_part_range('calamity.test_range_idx',NULL,NULL::INT4);/* not ok*/
244+
SELECT get_part_range('calamity.test_range_idx',0,NULL::INT2);/* not ok*/
245+
SELECT get_part_range('calamity.test_range_idx',-2,NULL::INT4);/* not ok*/
246+
SELECT get_part_range('calamity.test_range_idx',4,NULL::INT4);/* not ok*/
247+
SELECT get_part_range('calamity.test_range_idx',0,NULL::INT4);/* OK*/
248+
249+
DROPTABLEcalamity.test_range_idx CASCADE;
250+
251+
252+
/* check function get_part_range_by_oid()*/
253+
CREATETABLEcalamity.test_range_oid(val INT4NOT NULL);
254+
SELECT create_range_partitions('calamity.test_range_oid','val',1,10,1);
255+
256+
SELECT get_part_range(NULL,NULL::INT4);/* not ok*/
257+
SELECT get_part_range('pg_class',NULL::INT4);/* not ok*/
258+
SELECT get_part_range('calamity.test_range_oid_1',NULL::INT2);/* not ok*/
259+
SELECT get_part_range('calamity.test_range_oid_1',NULL::INT4);/* OK*/
260+
261+
DROPTABLEcalamity.test_range_oid CASCADE;
262+
263+
264+
238265
DROPSCHEMA calamity CASCADE;
239266
DROP EXTENSION pg_pathman;

‎sql/pathman_interval.sql

Lines changed: 55 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,62 @@ CREATE SCHEMA test_interval;
55

66

77

8-
/* Range partitions forINTEGER type*/
9-
CREATETABLEtest_interval.abc (idSERIAL);
8+
/* Range partitions forINT2 type*/
9+
CREATETABLEtest_interval.abc (idINT2NOT NULL);
1010
SELECT create_range_partitions('test_interval.abc','id',0,100,2);
11-
SELECT set_interval('test_interval.abc',NULL::INTEGER);
11+
SELECT set_interval('test_interval.abc',NULL::INT2);
12+
13+
/* pg_pathman shouldn't be able to create a new partition*/
14+
INSERT INTOtest_interval.abcVALUES (250);
15+
16+
/* Set a trivial interval*/
17+
SELECT set_interval('test_interval.abc',0);
18+
19+
/* Set a negative interval*/
20+
SELECT set_interval('test_interval.abc',-100);
21+
22+
/* We also shouldn't be able to set a trivial interval directly*/
23+
UPDATE pathman_configSET range_interval='0'
24+
WHERE partrel='test_interval.abc'::REGCLASS;
25+
26+
/* Set a normal interval*/
27+
SELECT set_interval('test_interval.abc',1000);
28+
INSERT INTOtest_interval.abcVALUES (250);
29+
SELECT*FROM pathman_config;
30+
31+
DROPTABLEtest_interval.abc CASCADE;
32+
33+
34+
/* Range partitions for INT4 type*/
35+
CREATETABLEtest_interval.abc (id INT4NOT NULL);
36+
SELECT create_range_partitions('test_interval.abc','id',0,100,2);
37+
SELECT set_interval('test_interval.abc',NULL::INT4);
38+
39+
/* pg_pathman shouldn't be able to create a new partition*/
40+
INSERT INTOtest_interval.abcVALUES (250);
41+
42+
/* Set a trivial interval*/
43+
SELECT set_interval('test_interval.abc',0);
44+
45+
/* Set a negative interval*/
46+
SELECT set_interval('test_interval.abc',-100);
47+
48+
/* We also shouldn't be able to set a trivial interval directly*/
49+
UPDATE pathman_configSET range_interval='0'
50+
WHERE partrel='test_interval.abc'::REGCLASS;
51+
52+
/* Set a normal interval*/
53+
SELECT set_interval('test_interval.abc',1000);
54+
INSERT INTOtest_interval.abcVALUES (250);
55+
SELECT*FROM pathman_config;
56+
57+
DROPTABLEtest_interval.abc CASCADE;
58+
59+
60+
/* Range partitions for INT8 type*/
61+
CREATETABLEtest_interval.abc (id INT8NOT NULL);
62+
SELECT create_range_partitions('test_interval.abc','id',0,100,2);
63+
SELECT set_interval('test_interval.abc',NULL::INT8);
1264

1365
/* pg_pathman shouldn't be able to create a new partition*/
1466
INSERT INTOtest_interval.abcVALUES (250);

‎src/pl_range_funcs.c

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,12 @@ get_part_range_by_oid(PG_FUNCTION_ARGS)
256256
prel=get_pathman_relation_info(parent_relid);
257257
shout_if_prel_is_invalid(parent_relid,prel,PT_RANGE);
258258

259+
/* Check type of 'dummy' (for correct output) */
260+
if (getBaseType(get_fn_expr_argtype(fcinfo->flinfo,1))!=getBaseType(prel->atttype))
261+
elog(ERROR,"pg_typeof(dummy) should be %s",
262+
format_type_be(getBaseType(prel->atttype)));
263+
264+
259265
ranges=PrelGetRangesArray(prel);
260266

261267
/* Look for the specified partition */
@@ -309,6 +315,12 @@ get_part_range_by_idx(PG_FUNCTION_ARGS)
309315
prel=get_pathman_relation_info(parent_relid);
310316
shout_if_prel_is_invalid(parent_relid,prel,PT_RANGE);
311317

318+
/* Check type of 'dummy' (for correct output) */
319+
if (getBaseType(get_fn_expr_argtype(fcinfo->flinfo,2))!=getBaseType(prel->atttype))
320+
elog(ERROR,"pg_typeof(dummy) should be %s",
321+
format_type_be(getBaseType(prel->atttype)));
322+
323+
312324
/* Now we have to deal with 'idx' */
313325
if (partition_idx<-1)
314326
{
@@ -701,9 +713,16 @@ interval_is_trivial(Oid atttype, Datum interval, Oid interval_type)
701713
switch(atttype)
702714
{
703715
caseINT2OID:
716+
default_value=Int16GetDatum(0);
717+
break;
718+
704719
caseINT4OID:
720+
default_value=Int32GetDatum(0);
721+
break;
722+
723+
/* Take care of 32-bit platforms */
705724
caseINT8OID:
706-
default_value=Int16GetDatum(0);
725+
default_value=Int64GetDatum(0);
707726
break;
708727

709728
caseFLOAT4OID:

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp