|
| 1 | +-- |
| 2 | +-- PARALLEL |
| 3 | +-- |
| 4 | +-- Serializable isolation would disable parallel query, so explicitly use an |
| 5 | +-- arbitrary other level. |
| 6 | +begin isolation level repeatable read; |
| 7 | +-- encourage use of parallel plans |
| 8 | +set parallel_setup_cost=0; |
| 9 | +set parallel_tuple_cost=0; |
| 10 | +set min_parallel_table_scan_size=0; |
| 11 | +set max_parallel_workers_per_gather=4; |
| 12 | +-- |
| 13 | +-- Test write operations that has an underlying query that is eligble |
| 14 | +-- for parallel plans |
| 15 | +-- |
| 16 | +explain (costs off) create table parallel_write as |
| 17 | + select length(stringu1) from tenk1 group by length(stringu1); |
| 18 | + QUERY PLAN |
| 19 | +--------------------------------------------------- |
| 20 | + Finalize HashAggregate |
| 21 | + Group Key: (length((stringu1)::text)) |
| 22 | + -> Gather |
| 23 | + Workers Planned: 4 |
| 24 | + -> Partial HashAggregate |
| 25 | + Group Key: length((stringu1)::text) |
| 26 | + -> Parallel Seq Scan on tenk1 |
| 27 | +(7 rows) |
| 28 | + |
| 29 | +create table parallel_write as |
| 30 | + select length(stringu1) from tenk1 group by length(stringu1); |
| 31 | +drop table parallel_write; |
| 32 | +explain (costs off) select length(stringu1) into parallel_write |
| 33 | + from tenk1 group by length(stringu1); |
| 34 | + QUERY PLAN |
| 35 | +--------------------------------------------------- |
| 36 | + Finalize HashAggregate |
| 37 | + Group Key: (length((stringu1)::text)) |
| 38 | + -> Gather |
| 39 | + Workers Planned: 4 |
| 40 | + -> Partial HashAggregate |
| 41 | + Group Key: length((stringu1)::text) |
| 42 | + -> Parallel Seq Scan on tenk1 |
| 43 | +(7 rows) |
| 44 | + |
| 45 | +select length(stringu1) into parallel_write |
| 46 | + from tenk1 group by length(stringu1); |
| 47 | +drop table parallel_write; |
| 48 | +explain (costs off) create materialized view parallel_mat_view as |
| 49 | + select length(stringu1) from tenk1 group by length(stringu1); |
| 50 | + QUERY PLAN |
| 51 | +--------------------------------------------------- |
| 52 | + Finalize HashAggregate |
| 53 | + Group Key: (length((stringu1)::text)) |
| 54 | + -> Gather |
| 55 | + Workers Planned: 4 |
| 56 | + -> Partial HashAggregate |
| 57 | + Group Key: length((stringu1)::text) |
| 58 | + -> Parallel Seq Scan on tenk1 |
| 59 | +(7 rows) |
| 60 | + |
| 61 | +create materialized view parallel_mat_view as |
| 62 | + select length(stringu1) from tenk1 group by length(stringu1); |
| 63 | +drop materialized view parallel_mat_view; |
| 64 | +prepare prep_stmt as select length(stringu1) from tenk1 group by length(stringu1); |
| 65 | +explain (costs off) create table parallel_write as execute prep_stmt; |
| 66 | + QUERY PLAN |
| 67 | +--------------------------------------------------- |
| 68 | + Finalize HashAggregate |
| 69 | + Group Key: (length((stringu1)::text)) |
| 70 | + -> Gather |
| 71 | + Workers Planned: 4 |
| 72 | + -> Partial HashAggregate |
| 73 | + Group Key: length((stringu1)::text) |
| 74 | + -> Parallel Seq Scan on tenk1 |
| 75 | +(7 rows) |
| 76 | + |
| 77 | +create table parallel_write as execute prep_stmt; |
| 78 | +drop table parallel_write; |
| 79 | +rollback; |