diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index 453a598cad4..c1535cbb3f2 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -826,6 +826,9 @@ subquery_planner(PlannerGlobal *glob, Query *parse, EXPRKIND_LIMIT); wc->endOffset = preprocess_expression(root, wc->endOffset, EXPRKIND_LIMIT); + wc->runCondition = (List *) preprocess_expression(root, + (Node *) wc->runCondition, + EXPRKIND_TARGET); } parse->limitOffset = preprocess_expression(root, parse->limitOffset, diff --git a/src/backend/optimizer/prep/prepjointree.c b/src/backend/optimizer/prep/prepjointree.c index cc7af394aef..5a946cdfe9e 100644 --- a/src/backend/optimizer/prep/prepjointree.c +++ b/src/backend/optimizer/prep/prepjointree.c @@ -2124,6 +2124,15 @@ perform_pullup_replace_vars(PlannerInfo *root, pullup_replace_vars((Node *) parse->targetList, rvcontext); parse->returningList = (List *) pullup_replace_vars((Node *) parse->returningList, rvcontext); + + foreach(lc, parse->windowClause) + { + WindowClause *wc = lfirst_node(WindowClause, lc); + + if (wc->runCondition != NIL) + wc->runCondition = (List *) + pullup_replace_vars((Node *) wc->runCondition, rvcontext); + } if (parse->onConflict) { parse->onConflict->onConflictSet = (List *)