]> git.ipfire.org Git - thirdparty/postgresql.git/commit
Clean up all relid fields of RestrictInfos during join removal.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 20 Apr 2026 18:48:23 +0000 (14:48 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 20 Apr 2026 18:48:23 +0000 (14:48 -0400)
commitcfcd5711160a42249def8f781bae197829cf44c7
tree3f456df762af88ec241ddf249dd2925112ad246d
parent207cb2abcba00f78d57cdaca896f41c9453b0f2f
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
src/backend/optimizer/plan/analyzejoins.c
src/test/regress/expected/join.out
src/test/regress/sql/join.sql