Allow DML commands that create tables to use parallel query.

Haribabu Kommi, reviewed by Dilip Kumar and Rafia Sabih.  Various
cosmetic changes by me to explain why this appears to be safe but
allowing inserts in parallel mode in general wouldn't be.  Also, I
removed the REFRESH MATERIALIZED VIEW case from Haribabu's patch,
since I'm not convinced that case is OK, and hacked on the
documentation somewhat.

Discussion: http://postgr.es/m/CAJrrPGdo5bak6qnPWe8Kpi8g_jfQEs-G4SYmG9y+OFaw2-dPvA@mail.gmail.com
This commit is contained in:
Robert Haas
2017-10-05 11:34:38 -04:00
parent 4d85c2900b
commit e9baa5e9fa
10 changed files with 150 additions and 27 deletions

View File

@ -0,0 +1,42 @@
--
-- PARALLEL
--
-- Serializable isolation would disable parallel query, so explicitly use an
-- arbitrary other level.
begin isolation level repeatable read;
-- encourage use of parallel plans
set parallel_setup_cost=0;
set parallel_tuple_cost=0;
set min_parallel_table_scan_size=0;
set max_parallel_workers_per_gather=4;
--
-- Test write operations that has an underlying query that is eligble
-- for parallel plans
--
explain (costs off) create table parallel_write as
select length(stringu1) from tenk1 group by length(stringu1);
create table parallel_write as
select length(stringu1) from tenk1 group by length(stringu1);
drop table parallel_write;
explain (costs off) select length(stringu1) into parallel_write
from tenk1 group by length(stringu1);
select length(stringu1) into parallel_write
from tenk1 group by length(stringu1);
drop table parallel_write;
explain (costs off) create materialized view parallel_mat_view as
select length(stringu1) from tenk1 group by length(stringu1);
create materialized view parallel_mat_view as
select length(stringu1) from tenk1 group by length(stringu1);
drop materialized view parallel_mat_view;
prepare prep_stmt as select length(stringu1) from tenk1 group by length(stringu1);
explain (costs off) create table parallel_write as execute prep_stmt;
create table parallel_write as execute prep_stmt;
drop table parallel_write;
rollback;