Re: Oversight in reparameterize_path_by_child leading to executor crash

Поиск
Список
Период
Сортировка
От Ashutosh Bapat
Тема Re: Oversight in reparameterize_path_by_child leading to executor crash
Дата
Msg-id CAExHW5s0tQkCw_Bv68sYtZV3=ALY+emeuPa2_3J6pF8eS=g8bw@mail.gmail.com
обсуждение исходный текст
Ответ на Re: Oversight in reparameterize_path_by_child leading to executor crash  (Richard Guo <guofenglinux@gmail.com>)
Ответы Re: Oversight in reparameterize_path_by_child leading to executor crash  (Richard Guo <guofenglinux@gmail.com>)
Список pgsql-hackers


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

On Thu, Aug 3, 2023 at 12:38 PM Ashutosh Bapat <ashutosh.bapat.oss@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

В списке pgsql-hackers по дате отправления:

Предыдущее
От: shveta malik
Дата:
Сообщение: Re: Synchronizing slots from primary to standby
Следующее
От: Tomas Vondra
Дата:
Сообщение: Re: Use of additional index columns in rows filtering