Re: Window Functions with identical PARTITION BY and ORDER BY clauses evaluated separately

From: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
To: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
Cc: Christopher Inokuchi <cinokuchi(at)gmail(dot)com>, Greg Sabino Mullane <htamfids(at)gmail(dot)com>, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: Window Functions with identical PARTITION BY and ORDER BY clauses evaluated separately
Date: 2025-03-08 03:17:23
Message-ID: CAKFQuwZs9tZEy8TDLtqJJTAfRcLrM+i5TDEuppOXVFhhG3pg7g@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Fri, Mar 7, 2025 at 5:05 PM Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us> wrote:

> Christopher Inokuchi <cinokuchi(at)gmail(dot)com> writes:
> > Was it really not intentional that the docs explicitly name PARTITION BY
> > and ORDER BY rather than the entire window_definition? If I understand
> > correctly, only those two clauses control which records are hit and in
> what
> > order.
>
> Yeah, it's intentional, and in fact required by the SQL standard.
> However, you're misinterpreting what the guarantee is. The spec
> requirement is that window functions sharing PARTITION BY and
> ORDER BY all be evaluated on the same concrete ordering of the
> data, ie there can't be any re-sorting between them. And that's
> what we implement. We do use a separate WindowAgg node for
> each distinguishable window specification, but you'll notice
> there is not a Sort step between them unless the query involves
> entirely-incompatible PARTITION/ORDER BY specs.
>
> Perhaps the wording in section 7.2.5 could be improved; I agree
> that "evaluated in one pass" is capable of being read in more
> than one way, and it's not clear that it's referring to sorts.
> Do you have any suggestions for clearer wording?
>

We seem to do quite a few things that we don't tell the user about. The
attached patch describes those things and adds an example demonstrating
their effects via an explain; which is the only way you can construct an
example for this material.

Considered a draft pending feedback to either throw it out in favor of a
one-word/one-line fix or support for going into this amount of detail.

David J.

Attachment Content-Type Size
v0-draft-0001-doc-more-thoroughly-explain-window-function-processing.patch text/x-patch 6.8 KB

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Bertrand Drouvot 2025-03-08 08:02:35 Re: BUG #18828: Crash when pg_get_logical_snapshot_meta() passed empty string
Previous Message Tom Lane 2025-03-08 01:14:42 Re: BUG #18836: Cannot import foreign schema under different schema name when foreign table uses row types