Re: get_loop_count() fails to ignore RELOPT_DEADREL rels

Поиск
Список
Период
Сортировка
От David Rowley
Тема Re: get_loop_count() fails to ignore RELOPT_DEADREL rels
Дата
Msg-id CAApHDvo5wCRk7uHBuMHJaDpbW-b_oGKQOuisCZzHC25=H3__fA@mail.gmail.com
обсуждение исходный текст
Ответ на Re: get_loop_count() fails to ignore RELOPT_DEADREL rels  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: get_loop_count() fails to ignore RELOPT_DEADREL rels  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On Sun, Jul 27, 2014 at 2:35 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
David Rowley <dgrowleyml@gmail.com> writes:
> In order to get my patch working with an Assert enabled build I've had to
> apply the attached patch.

That patch is entirely bogus.  What you should be asking is why
get_loop_count is being applied to a relation that's supposedly been
removed from the query.  It should only get applied to rels that are
required outer rels for a parameterized path, and thus certainly
not dead.


hmm ok. After further investigation it seems that this is down to the EquivalenceClass still containing references to the dead rel. What seems to be happening is match_eclass_clauses_to_index() is calling generate_implied_equalities_for_column() which is generating RestrictInfo clauses which make reference to the dead relation.

With the existing left join removal code, in all the test cases I've thrown at it, match_eclass_clauses_to_index() seems to early exit on if (!index->rel->has_eclass_joins), but this is not the case when I'm removing SEMI and ANTI joins. So likely this is something I'll have to tackle in that patch, perhaps by stripping out the equivalence class members which belong to the newly dead rel in remove_rel_from_query().

Apologies for the noise

Regards

David Rowley
 

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

Предыдущее
От: Peter Geoghegan
Дата:
Сообщение: Re: B-Tree support function number 3 (strxfrm() optimization)
Следующее
От: David Rowley
Дата:
Сообщение: Re: SKIP LOCKED DATA (work in progress)