agora inbox for pgsql-committers@postgresql.org
help / color / mirror / Atom feedFrom: Richard Guo <rguo@postgresql.org>
To: pgsql-committers@lists.postgresql.org
Subject: pgsql: Fix nestloop parameter handling for PlaceHolderVars in child joi
Date: Tue, 08 Sep 2026 01:14:55 +0000
Message-ID: <E1x3kQI-00000003v0l-2Mmw@gemulon.postgresql.org> (raw)
Fix nestloop parameter handling for PlaceHolderVars in child joins
When creating a nestloop plan for a partitionwise child join, the
outer rel's relids are child relids, but PlaceHolderInfo.ph_eval_at is
always expressed in terms of the topmost parent rels. As a result,
replace_nestloop_params() and identify_current_nestloop_params()
failed to recognize that a PlaceHolderVar evaluated at the outer child
rel can be supplied as a nestloop param. Instead, the Vars within the
PHV's expression were replaced with params, but the outer child rel
emits only the PHV, not those bare Vars, leading to "variable not
found in subplan target list" errors from setrefs.c.
To fix, also include the outer rel's top parent relids in the relid
set used for these checks, so that ph_eval_at comparisons are done in
terms of parent rels while Var checks continue to work in terms of
child rels.
On v18 and later, the required-outer set passed to
identify_current_nestloop_params() has the same problem: it is in
terms of child rels once a parameterized child join path has been
reparameterized by an upper child join. With the above fix in place,
a PlaceHolderVar that depends on both the outer rel and the parameter
source becomes a single NestLoopParam, and that param was never
claimed by any nestloop node, leading to "failed to assign all
NestLoopParams to plan nodes" errors. To fix, also include the top
parents of any child rels in that set. Older branches lack this code
path, so they receive only the first change.
Back-patch to all supported branches.
Bug: #19653
Reported-by: Annie <10215501441@stu.ecnu.edu.cn>
Author: Richard Guo <guofenglinux@gmail.com>
Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/19653-9352cc6ba17b662f@postgresql.org
Backpatch-through: 14
Branch
------
REL_15_STABLE
Details
-------
https://git.postgresql.org/pg/commitdiff/a9875e35eed18d1db251f6c8246242c404709b40
Modified Files
--------------
src/backend/optimizer/plan/createplan.c | 18 +++--
src/test/regress/expected/partition_join.out | 111 +++++++++++++++++++++++++++
src/test/regress/sql/partition_join.sql | 43 +++++++++++
3 files changed, 167 insertions(+), 5 deletions(-)
view thread (7+ messages) latest in thread
Message-ID: <E1x3kQI-00000003v0l-2Mmw@gemulon.postgresql.org>
Permalink: ../E1x3kQI-00000003v0l-2Mmw@gemulon.postgresql.org/
Also on: postgresql.org/message-id/E1x3kQI-00000003v0l-2Mmw@gemulon.postgresql.org
reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-committers@postgresql.org
Cc: rguo@postgresql.org, pgsql-committers@lists.postgresql.org
Subject: Re: pgsql: Fix nestloop parameter handling for PlaceHolderVars in child joi
In-Reply-To: <E1x3kQI-00000003v0l-2Mmw@gemulon.postgresql.org>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox