pgsql: Disallow removing placeholders during Self-Join Elimination. - Mailing list pgsql-committers

From Alexander Korotkov
Subject pgsql: Disallow removing placeholders during Self-Join Elimination.
Date
Msg-id E1u9AhY-00261K-0Q@gemulon.postgresql.org
Whole thread Raw
List pgsql-committers
Disallow removing placeholders during Self-Join Elimination.

fc069a3a6319 implements Self-Join Elimination (SJE), which can remove base
relations when appropriate.  However, regressions tests for SJE only cover
the case when placeholder variables (PHVs) are evaluated and needed only
in a single base rel.  If this baserel is removed due to SJE, its clauses,
including PHVs, will be transferred to the keeping relation.  Removing these
PHVs may trigger an error on plan creation -- thanks to the b3ff6c742f6c for
detecting that.

This commit skips removal of PHVs during SJE.  This might also happen that
we skip the removal of some PHVs that could be removed.  However, the overhead
of extra PHVs is small compared to the complexity of analysis needed to remove
them.

Reported-by: Alexander Lakhin <exclusion@gmail.com>
Author: Alena Rybakina <a.rybakina@postgrespro.ru>
Author: Andrei Lepikhov <lepihov@gmail.com>
Reviewed-by: Alexander Korotkov <aekorotkov@gmail.com>
Reviewed-by: Richard Guo <guofenglinux@gmail.com>

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/1aa7cf9eb85972aaf2969306e84f5fc794fbef7f

Modified Files
--------------
src/backend/optimizer/plan/analyzejoins.c | 17 +++++++++++++---
src/test/regress/expected/join.out        | 34 ++++++++++++++++++++++++++++++-
src/test/regress/sql/join.sql             | 23 ++++++++++++++++++++-
3 files changed, 69 insertions(+), 5 deletions(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Remove inappropriate inclusions of c.h and postgres_fe.h.
Next
From: Michael Paquier
Date:
Subject: pgsql: Remove circular #include's between wait_event.h and wait_event_t