text: --
  -- PARALLEL
  --
  
  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;
  
  -- encourage use of parallel plans
  set parallel_setup_cost=0;
  set parallel_tuple_cost=0;
  set min_parallel_relation_size=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;
  
  -- test parallel plan when group by expression is in target list.
  explain (costs off)
  	select length(stringu1) from tenk1 group by length(stringu1);
  select length(stringu1) from tenk1 group by length(stringu1);
  
  explain (costs off)
  	select stringu1, count(*) from tenk1 group by stringu1 order by stringu1;
  
  -- test that parallel plan for aggregates is not selected when
  -- target list contains parallel restricted clause.
  explain (costs off)
  	select  sum(parallel_restricted(unique1)) from tenk1
  	group by(parallel_restricted(unique1));
  
  set force_parallel_mode=1;
  
  explain (costs off)
    select stringu1::int2 from tenk1 where unique1 = 1;
  
  do $$begin
    -- Provoke error, possibly in worker.  If this error happens to occur in
    -- the worker, there will be a CONTEXT line which must be hidden.
    perform stringu1::int2 from tenk1 where unique1 = 1;
    exception
  	when others then
  		raise 'SQLERRM: %', sqlerrm;
  end$$;
  
  rollback;
  