pgsql: Fix EPQ run-time pruning using the parent's PARAM_EXEC values

From: David Rowley <drowley(at)postgresql(dot)org>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Fix EPQ run-time pruning using the parent's PARAM_EXEC values
Date: 2026-10-15 02:49:59
Message-ID: E1xHBXb-00000001fyv-3vAn@gemulon.postgresql.org
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix EPQ run-time pruning using the parent's PARAM_EXEC values

8741e48e5 made EvalPlanQualStart() borrow the parent EState's
es_part_prune_states. However, the ExprContext in each
PartitionPruneState belongs to the parent EState, so exec pruning during
an EPQ recheck used the parent's PARAM_EXEC values, i.e. those from the
old row version. This could prune away the partition the recheck
needed, causing the row to be silently skipped, e.g. with a correlated
subquery on a partitioned table in the WHERE clause of an UPDATE.

Here we fix this by giving the EPQ EState its own PartitionPruneStates,
while still borrowing the parent's es_part_prune_results so that the
same subplans are initialized. As the states are no longer shared, the
"initialized" field added by 1b5dd3a24 is no longer needed, so remove
it. This also undoes the ABI break that field caused in 18.

Backpatch to 18, where 8741e48e5 and 1b5dd3a24 were backpatched.

Author: Zsolt Parragi <zsolt(dot)parragi(at)percona(dot)com>
Reviewed-by: David Rowley <dgrowleyml(at)gmail(dot)com>
Discussion: https://postgr.es/m/CAN4CZFPZ6qKnv6FPmq1RQZ49cHALCwLBu_NJdqUrkZNg0z81JQ%40mail.gmail.com
Backpatch-through: 18

Branch
------
REL_19_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/9b505ef6cc197bc9094bac80f3a2e6fa5a51a52c

Modified Files
--------------
src/backend/executor/execMain.c | 7 +++-
src/backend/executor/execPartition.c | 42 +++++++++++++++-------
src/include/executor/execPartition.h | 4 +--
.../expected/eval-plan-qual-partition-prune.out | 16 +++++++++
.../specs/eval-plan-qual-partition-prune.spec | 13 ++++++-
5 files changed, 65 insertions(+), 17 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message David Rowley 2026-10-15 02:50:27 pgsql: Fix EPQ run-time pruning using the parent's PARAM_EXEC values
Previous Message David Rowley 2026-10-15 02:49:33 pgsql: Fix EPQ run-time pruning using the parent's PARAM_EXEC values