Thread
Commits
-
Disallow set-returning functions within window OVER clauses.
- 1de468099d27 master landed
- 0c15b715c651 19 (unreleased) landed
-
BUG #19535: Splitting window input targets can break same-level SRF lockstep semantics
The Post Office <noreply@postgresql.org> — 2026-06-24T14:46:21Z
The following bug has been logged on the website: Bug reference: 19535 Logged by: Qifan Liu Email address: imchifan@163.com PostgreSQL version: 18.4 Operating system: Ubuntu 20.04 x86-64, docker image postgres:18.4 Description: ## PoC ```sql WITH source AS ( SELECT row_number() OVER ( PARTITION BY generate_series(1, 2) ORDER BY generate_series(1, 2) ) AS rn, generate_series(1, 2) AS g1, generate_series(11, 12) AS g2 ) SELECT * FROM source ORDER BY rn, g1, g2; WITH s AS ( SELECT generate_series(1, 2) AS g1, generate_series(11, 12) AS g2 ) SELECT 1::bigint AS rn, g1, g2 FROM s ORDER BY rn, g1, g2; EXPLAIN (COSTS OFF) WITH source AS ( SELECT row_number() OVER ( PARTITION BY generate_series(1, 2) ORDER BY generate_series(1, 2) ) AS rn, generate_series(1, 2) AS g1, generate_series(11, 12) AS g2 ) SELECT * FROM source ORDER BY rn, g1, g2; ``` ## Expected Behavior The two same-level SRFs should run in lockstep, yielding: ```text 1 | 1 | 11 1 | 2 | 12 ``` ## Actual Behavior The query returns four rows instead of two: ```text 1 | 1 | 11 1 | 1 | 12 1 | 2 | 11 1 | 2 | 12 ``` The plan shows one `ProjectSet` below `WindowAgg` and another above it, which breaks same-level SRF lockstep semantics. -
Re: BUG #19535: Splitting window input targets can break same-level SRF lockstep semantics
David Rowley <dgrowleyml@gmail.com> — 2026-06-29T23:32:52Z
On Sun, 28 Jun 2026 at 00:55, PG Bug reporting form <noreply@postgresql.org> wrote: > ## Actual Behavior > > The query returns four rows instead of two: > > ```text > 1 | 1 | 11 > 1 | 1 | 12 > 1 | 2 | 11 > 1 | 2 | 12 > ``` > > The plan shows one `ProjectSet` below `WindowAgg` and another above it, > which breaks same-level SRF lockstep semantics. Thanks for the report. This is the same as what was discussed in bug #17502. There was a patch there to disallow SRFs in the WindowClause. I believe it was intended to go into master only, but that wasn't done. David [1] https://postgr.es/m/flat/17502-281a7aaacfaa872a%40postgresql.org