diff --git a/src/test/regress/expected/select_parallel.out b/src/test/regress/expected/select_parallel.out index 709e64e038ee9b6640ff5ae955a81c0e4f8d8fa3..b51c20c449d7e273aa0acd7660605ed6be85ba4b 100644 --- a/src/test/regress/expected/select_parallel.out +++ b/src/test/regress/expected/select_parallel.out @@ -1,12 +1,21 @@ -- -- PARALLEL -- +create or replace function parallel_restricted(int) returns int as $$ +begin + perform * from pg_stat_activity where client_port is null; + if (found) then + raise 'parallel restricted function run in worker'; + end if; + return $1; +end$$ language plpgsql parallel restricted; -- Serializable isolation would disable parallel query, so explicitly use an -- arbitrary other level. begin isolation level repeatable read; -- setup parallel test set parallel_setup_cost=0; set parallel_tuple_cost=0; +set max_parallel_workers_per_gather=4; explain (costs off) select count(*) from a_star; QUERY PLAN @@ -30,6 +39,45 @@ select count(*) from a_star; 50 (1 row) +-- test that parallel_restricted function doesn't run in worker +alter table tenk1 set (parallel_workers = 4); +explain (verbose, costs off) +select parallel_restricted(unique1) from tenk1 + where stringu1 = 'GRAAAA' order by 1; + QUERY PLAN +--------------------------------------------------------- + Sort + Output: (parallel_restricted(unique1)) + Sort Key: (parallel_restricted(tenk1.unique1)) + -> Gather + Output: parallel_restricted(unique1) + Workers Planned: 4 + -> Parallel Seq Scan on public.tenk1 + Output: unique1 + Filter: (tenk1.stringu1 = 'GRAAAA'::name) +(9 rows) + +select parallel_restricted(unique1) from tenk1 + where stringu1 = 'GRAAAA' order by 1; + parallel_restricted +--------------------- + 448 + 1124 + 1800 + 2476 + 3152 + 3828 + 4504 + 5180 + 5856 + 6532 + 7208 + 7884 + 8560 + 9236 + 9912 +(15 rows) + set force_parallel_mode=1; explain (costs off) select stringu1::int2 from tenk1 where unique1 = 1; diff --git a/src/test/regress/sql/select_parallel.sql b/src/test/regress/sql/select_parallel.sql index ef1884895794a3d4c9e7277abb227b8c16f984db..22dfb184c8eb4edbb1e2af18ce6348b119f19d88 100644 --- a/src/test/regress/sql/select_parallel.sql +++ b/src/test/regress/sql/select_parallel.sql @@ -2,6 +2,15 @@ -- PARALLEL -- +create or replace function parallel_restricted(int) returns int as $$ +begin + perform * from pg_stat_activity where client_port is null; + if (found) then + raise 'parallel restricted function run in worker'; + end if; + return $1; +end$$ language plpgsql parallel restricted; + -- Serializable isolation would disable parallel query, so explicitly use an -- arbitrary other level. begin isolation level repeatable read; @@ -9,11 +18,20 @@ begin isolation level repeatable read; -- setup parallel test set parallel_setup_cost=0; set parallel_tuple_cost=0; +set max_parallel_workers_per_gather=4; explain (costs off) select count(*) from a_star; select count(*) from a_star; +-- test that parallel_restricted function doesn't run in worker +alter table tenk1 set (parallel_workers = 4); +explain (verbose, costs off) +select parallel_restricted(unique1) from tenk1 + where stringu1 = 'GRAAAA' order by 1; +select parallel_restricted(unique1) from tenk1 + where stringu1 = 'GRAAAA' order by 1; + set force_parallel_mode=1; explain (costs off)