aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/test/regress/expected/select_parallel.out48
-rw-r--r--src/test/regress/sql/select_parallel.sql18
2 files changed, 66 insertions, 0 deletions
diff --git a/src/test/regress/expected/select_parallel.out b/src/test/regress/expected/select_parallel.out
index 709e64e038e..b51c20c449d 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 ef188489579..22dfb184c8e 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)