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

Commit48afabd

Browse files
committed
resolve merge conflicts
2 parents82507b6 +0c5323d commit48afabd

File tree

8 files changed

+227
-52
lines changed

8 files changed

+227
-52
lines changed

‎META.json‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name":"pg_pathman",
33
"abstract":"Partitioning tool",
44
"description":"The `pg_pathman` module provides optimized partitioning mechanism and functions to manage partitions.",
5-
"version":"1.3.1",
5+
"version":"1.3.2",
66
"maintainer": [
77
"Ildar Musin <i.musin@postgrespro.ru>",
88
"Dmitry Ivanov <d.ivanov@postgrespro.ru>",
@@ -24,7 +24,7 @@
2424
"pg_pathman": {
2525
"file":"pg_pathman--1.3.sql",
2626
"docfile":"README.md",
27-
"version":"1.3.1",
27+
"version":"1.3.2",
2828
"abstract":"Partitioning tool"
2929
}
3030
},

‎Makefile‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ REGRESS = pathman_basic \
3737
pathman_interval\
3838
pathman_join_clause\
3939
pathman_lateral\
40+
pathman_mergejoin\
4041
pathman_only\
4142
pathman_permissions\
4243
pathman_rowmarks\
@@ -45,7 +46,6 @@ REGRESS = pathman_basic \
4546
pathman_updates\
4647
pathman_utility_stmt
4748

48-
4949
EXTRA_REGRESS_OPTS=--temp-config=$(top_srcdir)/$(subdir)/conf.add
5050

5151
EXTRA_CLEAN = pg_pathman--$(EXTVERSION).sql ./isolation_output

‎expected/pathman_basic.out‎

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,40 +1022,7 @@ EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel_1 UNION ALL SELECT * FROM test.
10221022
/*
10231023
* Join
10241024
*/
1025-
SET enable_hashjoin = OFF;
10261025
set enable_nestloop = OFF;
1027-
SET enable_mergejoin = ON;
1028-
EXPLAIN (COSTS OFF)
1029-
SELECT * FROM test.range_rel j1
1030-
JOIN test.range_rel j2 on j2.id = j1.id
1031-
JOIN test.num_range_rel j3 on j3.id = j1.id
1032-
WHERE j1.dt < '2015-03-01' AND j2.dt >= '2015-02-01' ORDER BY j2.dt;
1033-
QUERY PLAN
1034-
-------------------------------------------------------------------------------------------
1035-
Sort
1036-
Sort Key: j2.dt
1037-
-> Merge Join
1038-
Merge Cond: (j3.id = j2.id)
1039-
-> Append
1040-
-> Index Scan using num_range_rel_1_pkey on num_range_rel_1 j3
1041-
-> Index Scan using num_range_rel_2_pkey on num_range_rel_2 j3_1
1042-
-> Index Scan using num_range_rel_3_pkey on num_range_rel_3 j3_2
1043-
-> Index Scan using num_range_rel_4_pkey on num_range_rel_4 j3_3
1044-
-> Materialize
1045-
-> Merge Join
1046-
Merge Cond: (j2.id = j1.id)
1047-
-> Merge Append
1048-
Sort Key: j2.id
1049-
-> Index Scan using range_rel_2_pkey on range_rel_2 j2
1050-
-> Index Scan using range_rel_3_pkey on range_rel_3 j2_1
1051-
-> Index Scan using range_rel_4_pkey on range_rel_4 j2_2
1052-
-> Materialize
1053-
-> Merge Append
1054-
Sort Key: j1.id
1055-
-> Index Scan using range_rel_1_pkey on range_rel_1 j1
1056-
-> Index Scan using range_rel_2_pkey on range_rel_2 j1_1
1057-
(22 rows)
1058-
10591026
SET enable_hashjoin = ON;
10601027
SET enable_mergejoin = OFF;
10611028
EXPLAIN (COSTS OFF)

‎expected/pathman_mergejoin.out‎

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
\set VERBOSITY terse
2+
SET search_path = 'public';
3+
CREATE SCHEMA pathman;
4+
CREATE EXTENSION pg_pathman SCHEMA pathman;
5+
CREATE SCHEMA test;
6+
CREATE TABLE test.range_rel (
7+
idSERIAL PRIMARY KEY,
8+
dtTIMESTAMP NOT NULL,
9+
txtTEXT);
10+
CREATE INDEX ON test.range_rel (dt);
11+
INSERT INTO test.range_rel (dt, txt)
12+
SELECT g, md5(g::TEXT) FROM generate_series('2015-01-01', '2015-04-30', '1 day'::interval) as g;
13+
SELECT pathman.create_range_partitions('test.range_rel', 'DT', '2015-01-01'::DATE, '1 month'::INTERVAL);
14+
create_range_partitions
15+
-------------------------
16+
4
17+
(1 row)
18+
19+
CREATE TABLE test.num_range_rel (
20+
idSERIAL PRIMARY KEY,
21+
txtTEXT);
22+
INSERT INTO test.num_range_rel SELECT g, md5(g::TEXT) FROM generate_series(1, 3000) as g;
23+
SELECT pathman.create_range_partitions('test.num_range_rel', 'id', 0, 1000, 4);
24+
create_range_partitions
25+
-------------------------
26+
4
27+
(1 row)
28+
29+
/*
30+
* Merge join between 3 partitioned tables
31+
*
32+
* test case for the fix of sorting, merge append and index scan issues
33+
* details in commit 54dd0486fc55b2d25cf7d095f83dee6ff4adee06
34+
*/
35+
SET enable_hashjoin = OFF;
36+
SET enable_nestloop = OFF;
37+
SET enable_mergejoin = ON;
38+
EXPLAIN (COSTS OFF)
39+
SELECT * FROM test.range_rel j1
40+
JOIN test.range_rel j2 on j2.id = j1.id
41+
JOIN test.num_range_rel j3 on j3.id = j1.id
42+
WHERE j1.dt < '2015-03-01' AND j2.dt >= '2015-02-01' ORDER BY j2.dt;
43+
QUERY PLAN
44+
-------------------------------------------------------------------------------------------
45+
Sort
46+
Sort Key: j2.dt
47+
-> Merge Join
48+
Merge Cond: (j3.id = j2.id)
49+
-> Append
50+
-> Index Scan using num_range_rel_1_pkey on num_range_rel_1 j3
51+
-> Index Scan using num_range_rel_2_pkey on num_range_rel_2 j3_1
52+
-> Index Scan using num_range_rel_3_pkey on num_range_rel_3 j3_2
53+
-> Index Scan using num_range_rel_4_pkey on num_range_rel_4 j3_3
54+
-> Materialize
55+
-> Merge Join
56+
Merge Cond: (j2.id = j1.id)
57+
-> Merge Append
58+
Sort Key: j2.id
59+
-> Index Scan using range_rel_2_pkey on range_rel_2 j2
60+
-> Index Scan using range_rel_3_pkey on range_rel_3 j2_1
61+
-> Index Scan using range_rel_4_pkey on range_rel_4 j2_2
62+
-> Materialize
63+
-> Merge Append
64+
Sort Key: j1.id
65+
-> Index Scan using range_rel_1_pkey on range_rel_1 j1
66+
-> Index Scan using range_rel_2_pkey on range_rel_2 j1_1
67+
(22 rows)
68+
69+
SET enable_hashjoin = ON;
70+
SET enable_nestloop = ON;
71+
DROP SCHEMA test CASCADE;
72+
NOTICE: drop cascades to 12 other objects
73+
DROP EXTENSION pg_pathman;
74+
DROP SCHEMA pathman CASCADE;

‎expected/pathman_mergejoin_0.out‎

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
\set VERBOSITY terse
2+
SET search_path = 'public';
3+
CREATE SCHEMA pathman;
4+
CREATE EXTENSION pg_pathman SCHEMA pathman;
5+
CREATE SCHEMA test;
6+
CREATE TABLE test.range_rel (
7+
idSERIAL PRIMARY KEY,
8+
dtTIMESTAMP NOT NULL,
9+
txtTEXT);
10+
CREATE INDEX ON test.range_rel (dt);
11+
INSERT INTO test.range_rel (dt, txt)
12+
SELECT g, md5(g::TEXT) FROM generate_series('2015-01-01', '2015-04-30', '1 day'::interval) as g;
13+
SELECT pathman.create_range_partitions('test.range_rel', 'DT', '2015-01-01'::DATE, '1 month'::INTERVAL);
14+
create_range_partitions
15+
-------------------------
16+
4
17+
(1 row)
18+
19+
CREATE TABLE test.num_range_rel (
20+
idSERIAL PRIMARY KEY,
21+
txtTEXT);
22+
INSERT INTO test.num_range_rel SELECT g, md5(g::TEXT) FROM generate_series(1, 3000) as g;
23+
SELECT pathman.create_range_partitions('test.num_range_rel', 'id', 0, 1000, 4);
24+
create_range_partitions
25+
-------------------------
26+
4
27+
(1 row)
28+
29+
/*
30+
* Merge join between 3 partitioned tables
31+
*
32+
* test case for the fix of sorting, merge append and index scan issues
33+
* details in commit 54dd0486fc55b2d25cf7d095f83dee6ff4adee06
34+
*/
35+
SET enable_hashjoin = OFF;
36+
SET enable_nestloop = OFF;
37+
SET enable_mergejoin = ON;
38+
EXPLAIN (COSTS OFF)
39+
SELECT * FROM test.range_rel j1
40+
JOIN test.range_rel j2 on j2.id = j1.id
41+
JOIN test.num_range_rel j3 on j3.id = j1.id
42+
WHERE j1.dt < '2015-03-01' AND j2.dt >= '2015-02-01' ORDER BY j2.dt;
43+
QUERY PLAN
44+
---------------------------------------------------------------------------------
45+
Sort
46+
Sort Key: j2.dt
47+
-> Merge Join
48+
Merge Cond: (j2.id = j3.id)
49+
-> Merge Join
50+
Merge Cond: (j1.id = j2.id)
51+
-> Merge Append
52+
Sort Key: j1.id
53+
-> Index Scan using range_rel_1_pkey on range_rel_1 j1
54+
-> Index Scan using range_rel_2_pkey on range_rel_2 j1_1
55+
-> Merge Append
56+
Sort Key: j2.id
57+
-> Index Scan using range_rel_2_pkey on range_rel_2 j2
58+
-> Index Scan using range_rel_3_pkey on range_rel_3 j2_1
59+
-> Index Scan using range_rel_4_pkey on range_rel_4 j2_2
60+
-> Append
61+
-> Index Scan using num_range_rel_1_pkey on num_range_rel_1 j3
62+
-> Index Scan using num_range_rel_2_pkey on num_range_rel_2 j3_1
63+
-> Index Scan using num_range_rel_3_pkey on num_range_rel_3 j3_2
64+
-> Index Scan using num_range_rel_4_pkey on num_range_rel_4 j3_3
65+
(20 rows)
66+
67+
SET enable_hashjoin = ON;
68+
SET enable_nestloop = ON;
69+
DROP SCHEMA test CASCADE;
70+
NOTICE: drop cascades to 12 other objects
71+
DROP EXTENSION pg_pathman;
72+
DROP SCHEMA pathman CASCADE;

‎sql/pathman_basic.sql‎

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -251,15 +251,7 @@ EXPLAIN (COSTS OFF) SELECT * FROM test.range_rel_1 UNION ALL SELECT * FROM test.
251251
/*
252252
* Join
253253
*/
254-
SET enable_hashjoin= OFF;
255254
set enable_nestloop= OFF;
256-
SET enable_mergejoin=ON;
257-
258-
EXPLAIN (COSTS OFF)
259-
SELECT*FROMtest.range_rel j1
260-
JOINtest.range_rel j2onj2.id=j1.id
261-
JOINtest.num_range_rel j3onj3.id=j1.id
262-
WHEREj1.dt<'2015-03-01'ANDj2.dt>='2015-02-01'ORDER BYj2.dt;
263255
SET enable_hashjoin=ON;
264256
SET enable_mergejoin= OFF;
265257
EXPLAIN (COSTS OFF)

‎sql/pathman_mergejoin.sql‎

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
\set VERBOSITY terse
2+
3+
SET search_path='public';
4+
CREATESCHEMApathman;
5+
CREATE EXTENSION pg_pathman SCHEMA pathman;
6+
CREATESCHEMAtest;
7+
8+
9+
CREATETABLEtest.range_rel (
10+
idSERIALPRIMARY KEY,
11+
dtTIMESTAMPNOT NULL,
12+
txtTEXT);
13+
CREATEINDEXONtest.range_rel (dt);
14+
15+
INSERT INTOtest.range_rel (dt, txt)
16+
SELECT g, md5(g::TEXT)FROM generate_series('2015-01-01','2015-04-30','1 day'::interval)as g;
17+
18+
SELECTpathman.create_range_partitions('test.range_rel','DT','2015-01-01'::DATE,'1 month'::INTERVAL);
19+
20+
CREATETABLEtest.num_range_rel (
21+
idSERIALPRIMARY KEY,
22+
txtTEXT);
23+
24+
INSERT INTOtest.num_range_relSELECT g, md5(g::TEXT)FROM generate_series(1,3000)as g;
25+
26+
SELECTpathman.create_range_partitions('test.num_range_rel','id',0,1000,4);
27+
28+
/*
29+
* Merge join between 3 partitioned tables
30+
*
31+
* test case for the fix of sorting, merge append and index scan issues
32+
* details in commit 54dd0486fc55b2d25cf7d095f83dee6ff4adee06
33+
*/
34+
SET enable_hashjoin= OFF;
35+
SET enable_nestloop= OFF;
36+
SET enable_mergejoin=ON;
37+
38+
EXPLAIN (COSTS OFF)
39+
SELECT*FROMtest.range_rel j1
40+
JOINtest.range_rel j2onj2.id=j1.id
41+
JOINtest.num_range_rel j3onj3.id=j1.id
42+
WHEREj1.dt<'2015-03-01'ANDj2.dt>='2015-02-01'ORDER BYj2.dt;
43+
44+
SET enable_hashjoin=ON;
45+
SET enable_nestloop=ON;
46+
47+
48+
DROPSCHEMA test CASCADE;
49+
DROP EXTENSION pg_pathman;
50+
DROPSCHEMA pathman CASCADE;

‎src/hooks.c‎

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ pathman_join_pathlist_hook(PlannerInfo *root,
152152
Relidsrequired_nestloop,
153153
required_inner;
154154
List*filtered_joinclauses=NIL,
155-
*saved_ppi_list;
155+
*saved_ppi_list,
156+
*pathkeys;
156157
ListCell*rinfo_lc;
157158

158159
if (!IsA(cur_inner_path,AppendPath))
@@ -217,17 +218,18 @@ pathman_join_pathlist_hook(PlannerInfo *root,
217218
return;
218219

219220

221+
/* TODO: create macro initial_cost_nestloop_compat() */
222+
#if defined(PGPRO_VERSION)&&PG_VERSION_NUM >=90603
223+
initial_cost_nestloop(root,&workspace,jointype,
224+
outer,inner,/* built paths */
225+
extra);
226+
#else
220227
initial_cost_nestloop(root,&workspace,jointype,
221228
outer,inner,/* built paths */
222229
extra->sjinfo,&extra->semifactors);
230+
#endif
223231

224-
nest_path=create_nestloop_path(root,joinrel,jointype,&workspace,
225-
extra->sjinfo,&extra->semifactors,
226-
outer,inner,extra->restrictlist,
227-
build_join_pathkeys(root,joinrel,
228-
jointype,
229-
outer->pathkeys),
230-
required_nestloop);
232+
pathkeys=build_join_pathkeys(root,joinrel,jointype,outer->pathkeys);
231233

232234
/* Discard all clauses that are to be evaluated by 'inner' */
233235
foreach (rinfo_lc,extra->restrictlist)
@@ -239,6 +241,24 @@ pathman_join_pathlist_hook(PlannerInfo *root,
239241
filtered_joinclauses=lappend(filtered_joinclauses,rinfo);
240242
}
241243

244+
/* TODO: create macro create_nestloop_path_compat() */
245+
#if defined(PGPRO_VERSION)&&PG_VERSION_NUM >=90603
246+
nest_path=create_nestloop_path(root,joinrel,jointype,&workspace,
247+
extra,
248+
outer,inner,
249+
filtered_joinclauses,
250+
pathkeys,
251+
calc_nestloop_required_outer(outer,inner));
252+
#else
253+
nest_path=create_nestloop_path(root,joinrel,jointype,&workspace,
254+
extra->sjinfo,
255+
&extra->semifactors,
256+
outer,inner,
257+
filtered_joinclauses,
258+
pathkeys,
259+
calc_nestloop_required_outer(outer,inner));
260+
#endif
261+
242262
/*
243263
* NOTE: Override 'rows' value produced by standard estimator.
244264
* Currently we use get_parameterized_joinrel_size() since

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp