BUG #19535: Splitting window input targets can break same-level SRF lockstep semantics - Mailing list pgsql-bugs

From PG Bug reporting form
Subject BUG #19535: Splitting window input targets can break same-level SRF lockstep semantics
Date
Msg-id 19535-376081d7cc07c86d@postgresql.org
Whole thread
Responses Re: BUG #19535: Splitting window input targets can break same-level SRF lockstep semantics
List pgsql-bugs
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.





pgsql-bugs by date:

Previous
From: PG Bug reporting form
Date:
Subject: BUG #19534: Qual pushdown across a window subquery is unsafe with nondeterministic partition collations
Next
From: Tom Lane
Date:
Subject: Re: BUG #19483: pg_upgrade fails with orphan records in pg_init_priv catalog table