fix cost subqueryscan wrong parallel cost

bucoo <bucoo@sohu.com>

From: "bucoo@sohu.com" <bucoo@sohu.com>
To: pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2022-04-12T06:57:16Z
Lists: pgsql-hackers

Attachments

The cost_subqueryscan function does not judge whether it is parallel.
regress
-- Incremental sort vs. set operations with varno 0
set enable_hashagg to off;
explain (costs off) select * from t union select * from t order by 1,3;
                        QUERY PLAN                        
----------------------------------------------------------
 Incremental Sort
   Sort Key: t.a, t.c
   Presorted Key: t.a
   ->  Unique
         ->  Sort
               Sort Key: t.a, t.b, t.c
               ->  Append
                     ->  Gather
                           Workers Planned: 2
                           ->  Parallel Seq Scan on t
                     ->  Gather
                           Workers Planned: 2
                           ->  Parallel Seq Scan on t t_1
to
 Incremental Sort
   Sort Key: t.a, t.c
   Presorted Key: t.a
   ->  Unique
         ->  Sort
               Sort Key: t.a, t.b, t.c
               ->  Gather
                     Workers Planned: 2
                     ->  Parallel Append
                           ->  Parallel Seq Scan on t
                           ->  Parallel Seq Scan on t t_1
Obviously the latter is less expensive



bucoo@sohu.com

Commits

  1. Fix rowcount estimate for SubqueryScan that's under a Gather.

  2. Optimize order of GROUP BY keys