pgsql: Clean up all relid fields of RestrictInfos during join removal. - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Clean up all relid fields of RestrictInfos during join removal.
Date
Msg-id E1wEtfe-001tkm-1n@gemulon.postgresql.org
Whole thread
List pgsql-committers
Clean up all relid fields of RestrictInfos during join removal.

The original implementation of remove_rel_from_restrictinfo()
thought it could skate by with removing no-longer-valid relid
bits from only the clause_relids and required_relids fields.
This is quite bogus, although somehow we had not run across a
counterexample before now.  At minimum, the left_relids and
right_relids fields need to be fixed because they will be
examined later by clause_sides_match_join().  But it seems
pretty foolish not to fix all the relid fields, so do that.

This needs to be back-patched as far as v16, because the
bug report shows a planner failure that does not occur
before v16.  I'm a little nervous about back-patching,
because this could cause unexpected plan changes due to
opening up join possibilities that were rejected before.
But it's hard to argue that this isn't a regression.  Also,
the fact that this changes no existing regression test results
suggests that the scope of changes may be fairly narrow.
I'll refrain from back-patching further though, since no
adverse effects have been demonstrated in older branches.

Bug: #19460
Reported-by: François Jehl <francois.jehl@pigment.com>
Author: Tom Lane <tgl@sss.pgh.pa.us>
Reviewed-by: Richard Guo <guofenglinux@gmail.com>
Discussion: https://postgr.es/m/19460-5625143cef66012f@postgresql.org
Backpatch-through: 16

Branch
------
REL_16_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/d509be4ace9058d84ce39cca6b968e38cc56c19b

Modified Files
--------------
src/backend/optimizer/plan/analyzejoins.c | 18 +++++++++++++-
src/test/regress/expected/join.out        | 39 +++++++++++++++++++++++++++++++
src/test/regress/sql/join.sql             | 23 ++++++++++++++++++
3 files changed, 79 insertions(+), 1 deletion(-)


pgsql-committers by date:

Previous
From: Tom Lane
Date:
Subject: pgsql: Make ExecForPortionOfLeftovers() obey SRF protocol.
Next
From: Masahiko Sawada
Date:
Subject: pgsql: doc: Fix missing role attribute in pg_get_tablespace_ddl() descr