aboutsummaryrefslogtreecommitdiff
path: root/src/backend/optimizer/plan/analyzejoins.c
diff options
context:
space:
mode:
authorAlexander Korotkov <akorotkov@postgresql.org>2024-01-02 09:48:50 +0200
committerAlexander Korotkov <akorotkov@postgresql.org>2024-01-02 09:48:50 +0200
commita7928a57b9f00c14dd1e257aaad9bffb7f5c98c8 (patch)
tree1a6798f45d31c6a88db64398aeaf47c2c235667a /src/backend/optimizer/plan/analyzejoins.c
parent9a17be1e244a45a77de25ed2ada246fd34e4557d (diff)
downloadpostgresql-a7928a57b9f00c14dd1e257aaad9bffb7f5c98c8.tar.gz
postgresql-a7928a57b9f00c14dd1e257aaad9bffb7f5c98c8.zip
Replace the relid in some missing fields during SJE
Reported-by: Alexander Lakhin Discussion: https://postgr.es/m/a89f480f-8143-0965-f22d-0a892777f501%40gmail.com Author: Andrei Lepikhov
Diffstat (limited to 'src/backend/optimizer/plan/analyzejoins.c')
-rw-r--r--src/backend/optimizer/plan/analyzejoins.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/backend/optimizer/plan/analyzejoins.c b/src/backend/optimizer/plan/analyzejoins.c
index 80739451b7c..1296b9da41e 100644
--- a/src/backend/optimizer/plan/analyzejoins.c
+++ b/src/backend/optimizer/plan/analyzejoins.c
@@ -1866,6 +1866,8 @@ remove_self_join_rel(PlannerInfo *root, PlanRowMark *kmark, PlanRowMark *rmark,
/* Replace varno in all the query structures */
query_tree_walker(root->parse, replace_varno_walker, &ctx,
QTW_EXAMINE_SORTGROUP);
+ if (root->parse->resultRelation == toRemove->relid)
+ root->parse->resultRelation = toKeep->relid;
/* Replace links in the planner info */
remove_rel_from_query(root, toRemove, toKeep->relid, NULL, NULL);
@@ -1875,6 +1877,9 @@ remove_self_join_rel(PlannerInfo *root, PlanRowMark *kmark, PlanRowMark *rmark,
toRemove->relid, toKeep->relid);
replace_varno((Node *) root->processed_groupClause,
toRemove->relid, toKeep->relid);
+ replace_relid(root->all_result_relids, toRemove->relid, toKeep->relid);
+ replace_relid(root->leaf_result_relids, toRemove->relid, toKeep->relid);
+
/*
* There may be references to the rel in root->fkey_list, but if so,