pgsql: Fix thinko in outer-join removal.

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Fix thinko in outer-join removal.
Дата
Msg-id E1pOP13-001bUe-Kg@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Fix thinko in outer-join removal.

If we have a RestrictInfo that mentions both the removal-candidate
relation and the outer join's relid, then that is a pushed-down
condition not a join condition, so it should be grounds for deciding
that we can't remove the outer join.  In commit 2489d76c4, I'd blindly
included the OJ's relid into "joinrelids" as per the new standard
convention, but the checks of attr_needed and ph_needed should only
allow the join's input rels to be mentioned.

Having done that, the check for references in pushed-down quals
a few lines further down should be redundant.  I left it in place
as an Assert, though.

While researching this I happened across a couple of comments that
worried about the effects of update_placeholder_eval_levels.
That's gone as of b448f1c8d, so we can remove some worry.

Per bug #17769 from Robins Tharakan.  The submitted test case
triggers this more or less accidentally because we flatten out
a LATERAL sub-select after we've done join strength reduction;
if we did that in the other order, this problem would be masked
because the outer join would get simplified to an inner join.
To ensure that the committed test case will continue to test
what it means to even if we make that happen someday, use a
test clause involving COALESCE(), which will prevent us from
using it to do join strength reduction.

Patch by me, but thanks to Richard Guo for initial investigation.

Discussion: https://postgr.es/m/17769-e4f7a5c9d84a80a7@postgresql.org

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/8538519db107777a6b06b7277185e6605caf8d4c

Modified Files
--------------
src/backend/optimizer/plan/analyzejoins.c | 30 ++++++++++++++----------------
src/backend/optimizer/plan/initsplan.c    |  6 +++---
src/backend/optimizer/util/var.c          | 10 ----------
src/test/regress/expected/join.out        | 15 +++++++++++++++
src/test/regress/sql/join.sql             |  7 +++++++
5 files changed, 39 insertions(+), 29 deletions(-)


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

Предыдущее
От: Tom Lane
Дата:
Сообщение: pgsql: Rethink treatment of "postponed" quals in deconstruct_jointree()
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix thinko in qual distribution.