On Thu, Aug 3, 2023 at 4:14 PM Richard Guo <guofengli...@gmail.com> wrote:

>
> On Thu, Aug 3, 2023 at 12:38 PM Ashutosh Bapat <
> ashutosh.bapat....@gmail.com> wrote:
>


> Sometimes it would help to avoid the translation at all if we postpone
> the reparameterization until createplan.c, such as in the case that a
> non-parameterized path wins at last.  For instance, for the query below
>
> regression=# explain (costs off)
> select * from prt1 t1 join prt1 t2 on t1.a = t2.a;
>                  QUERY PLAN
> --------------------------------------------
>  Append
>    ->  Hash Join
>          Hash Cond: (t1_1.a = t2_1.a)
>          ->  Seq Scan on prt1_p1 t1_1
>          ->  Hash
>                ->  Seq Scan on prt1_p1 t2_1
>    ->  Hash Join
>          Hash Cond: (t1_2.a = t2_2.a)
>          ->  Seq Scan on prt1_p2 t1_2
>          ->  Hash
>                ->  Seq Scan on prt1_p2 t2_2
>    ->  Hash Join
>          Hash Cond: (t1_3.a = t2_3.a)
>          ->  Seq Scan on prt1_p3 t1_3
>          ->  Hash
>                ->  Seq Scan on prt1_p3 t2_3
> (16 rows)
>
> Our current code would reparameterize each inner paths although at last
> we choose the non-parameterized paths.  If we do the reparameterization
> in createplan.c, we would be able to avoid all the translations.
>
>
I agree. The costs do not change because of reparameterization. The process
of creating paths is to estimate costs of different plans. So I think it
makes sense to delay anything which doesn't contribute to costing till the
final plan is decided.

However, if reparameterization can *not* happen at the planning time, we
have chosen a plan which can not be realised meeting a dead end. So as long
as we can ensure that the reparameterization is possible we can delay
actual translations. I think it should be possible to decide whether
reparameterization is possible based on the type of path alone. So seems
doable.

-- 
Best Wishes,
Ashutosh Bapat

Reply via email to