summaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan
diff options
context:
space:
mode:
authorTom Lane2025-01-17 01:40:07 +0000
committerTom Lane2025-01-17 01:40:07 +0000
commitbf826ea062979da02395fb2e8961feeef47604da (patch)
tree3af3c8aa5b19badb814b7403e7922ebc50b967b5 /src/backend/optimizer/plan
parentf7a8fc10ccb882249f8624b937f2c3b467d07bd6 (diff)
Fix setrefs.c's failure to do expression processing on prune steps.
We should run the expression subtrees of PartitionedRelPruneInfo structs through fix_scan_expr. Failure to do so means that AlternativeSubPlans within those expressions won't be cleaned up properly, resulting in "unrecognized node type" errors since v14. It seems fairly likely that at least some of the other steps done by fix_scan_expr are important here as well, resulting in as-yet- undetected bugs. Therefore, I've chosen to back-patch this to all supported branches including v13, even though the known symptom doesn't manifest in v13. Per bug #18778 from Alexander Lakhin. Discussion: https://postgr.es/m/[email protected]
Diffstat (limited to 'src/backend/optimizer/plan')
-rw-r--r--src/backend/optimizer/plan/setrefs.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/src/backend/optimizer/plan/setrefs.c b/src/backend/optimizer/plan/setrefs.c
index fff26555956..1e7b7bc6ffc 100644
--- a/src/backend/optimizer/plan/setrefs.c
+++ b/src/backend/optimizer/plan/setrefs.c
@@ -1795,6 +1795,12 @@ set_append_references(PlannerInfo *root,
PartitionedRelPruneInfo *pinfo = lfirst(l2);
pinfo->rtindex += rtoffset;
+ pinfo->initial_pruning_steps =
+ fix_scan_list(root, pinfo->initial_pruning_steps,
+ rtoffset, 1);
+ pinfo->exec_pruning_steps =
+ fix_scan_list(root, pinfo->exec_pruning_steps,
+ rtoffset, 1);
}
}
}
@@ -1871,6 +1877,12 @@ set_mergeappend_references(PlannerInfo *root,
PartitionedRelPruneInfo *pinfo = lfirst(l2);
pinfo->rtindex += rtoffset;
+ pinfo->initial_pruning_steps =
+ fix_scan_list(root, pinfo->initial_pruning_steps,
+ rtoffset, 1);
+ pinfo->exec_pruning_steps =
+ fix_scan_list(root, pinfo->exec_pruning_steps,
+ rtoffset, 1);
}
}
}