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