Re: pgsql: Disable run condition optimization for some WindowFuncs

From: Tatsuo Ishii <ishii(at)sraoss(dot)co(dot)jp>
To: drowley(at)postgresql(dot)org
Cc: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: Re: pgsql: Disable run condition optimization for some WindowFuncs
Date: 2024-05-01 05:02:12
Message-ID: 20240501.140212.1125310800129527161.t-ishii@sranhm.sra.co.jp
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

> Disable run condition optimization for some WindowFuncs
>
> 94985c210 added code to detect when WindowFuncs were monotonic and
> allowed additional quals to be "pushed down" into the subquery to be
> used as WindowClause runConditions in order to short-circuit execution
> in nodeWindowAgg.c.
>
> The Node representation of runConditions wasn't well selected and
> because we do qual pushdown before planning the subquery, the planning
> of the subquery could perform subquery pull-up of nested subqueries.
> For WindowFuncs with args, the arguments could be changed after pushing
> the qual down to the subquery.
>
> This was made more difficult by the fact that the code duplicated the
> WindowFunc inside an OpExpr to include in the WindowClauses runCondition
> field. This could result in duplication of subqueries and a pull-up of
> such a subquery could result in another initplan parameter being issued
> for the 2nd version of the subplan. This could result in errors such as:
>
> ERROR: WindowFunc not found in subplan target lists
>
> Here in the backbranches, we don't have the flexibility to improve the
> Node representation to resolve this, so instead we just disable the
> runCondition optimization for ntile() unless the argument is a Const,
> (v16 only) and likewise for count(expr) (both v15 and v16). count(*) is
> unaffected. All other window functions which support this optimization
> all take zero arguments and therefore are unaffected.
>
> Bug: #18170

Maybe you are talking about BUG #18305:
Unexpected error: "WindowFunc not found in subplan target lists" ?

> Reported-by: Zuming Jiang
> Discussion: https://postgr.es/m/18170-f1d17bf9a0d58b24@postgresql.org
> Backpatch-through 15 (master will be fixed independently)
>
> Branch
> ------
> REL_16_STABLE
>
> Details
> -------
> https://git.postgresql.org/pg/commitdiff/9d36b883bfaaeee04f09101c5e7cde96906a256e
>
> Modified Files
> --------------
> src/backend/utils/adt/int8.c | 15 ++++++
> src/backend/utils/adt/windowfuncs.c | 29 ++++++++---
> src/test/regress/expected/window.out | 94 ++++++++++++++++++++----------------
> src/test/regress/sql/window.sql | 43 ++++++++++-------
> 4 files changed, 116 insertions(+), 65 deletions(-)
>

In response to

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message David Rowley 2024-05-01 05:05:15 pgsql: Fix typos and incorrect type in read_stream.c
Previous Message David Rowley 2024-05-01 04:35:53 pgsql: Disable run condition optimization for some WindowFuncs