In commit
8c1d9d56e9a00680a035b8b333a98ea16b121eb7, I attempted to
add a regression test that would fail if the target list was pushed
into a parallel worker, but due to brain fade on my part, it just
randomly fails whether anything bad or not, because the error check
inside the parallel_restricted() function tests whether there is
*any process in the system* that is not connected to a client, not
whether the process running the query is not connected to a client.
A little experimentation has left me pessimistic about the
prospects of doing better here in a short amount of time, so let's
just fall back to checking that the plan is as we expect and leave
the execution-time check for another day.
--
-- 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;
+create or replace function parallel_restricted(int) returns int as
+ $$begin 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;
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;
-- 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;
+create or replace function parallel_restricted(int) returns int as
+ $$begin return $1; end$$ language plpgsql parallel restricted;
-- Serializable isolation would disable parallel query, so explicitly use an
-- arbitrary other level.
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;