|
| 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 | + id SERIAL PRIMARY KEY, |
| 8 | + dt TIMESTAMP NOT NULL, |
| 9 | + txt TEXT); |
| 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 | + id SERIAL PRIMARY KEY, |
| 21 | + txt TEXT); |
| 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 Append |
| 50 | + Sort Key: j2.id |
| 51 | + -> Index Scan using range_rel_2_pkey on range_rel_2 j2 |
| 52 | + Index Cond: (id IS NOT NULL) |
| 53 | + -> Append |
| 54 | + -> Index Scan using num_range_rel_1_pkey on num_range_rel_1 j3 |
| 55 | + -> Index Scan using num_range_rel_2_pkey on num_range_rel_2 j3_1 |
| 56 | + -> Index Scan using num_range_rel_3_pkey on num_range_rel_3 j3_2 |
| 57 | + -> Index Scan using num_range_rel_4_pkey on num_range_rel_4 j3_3 |
| 58 | +(13 rows) |
| 59 | + |
| 60 | +SET enable_hashjoin = ON; |
| 61 | +SET enable_nestloop = ON; |
| 62 | +DROP SCHEMA test CASCADE; |
| 63 | +NOTICE: drop cascades to 12 other objects |
| 64 | +DROP EXTENSION pg_pathman; |
| 65 | +DROP SCHEMA pathman CASCADE; |
0 commit comments