Re: Inconsistent Behavior of GROUP BY ROLLUP in v17 vs master
David Rowley <dgrowleyml@gmail.com>
From: David Rowley <dgrowleyml@gmail.com>
To: Tom Lane <tgl@sss.pgh.pa.us>
Cc: 邱宇航 <iamqyh@gmail.com>, Richard Guo <guofenglinux@gmail.com>, Bruce Momjian <bruce@momjian.us>, PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2025-09-24T00:10:00Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix test case from 40c242830
- ee49f2cf447a 18.1 landed
-
Fix pushdown of degenerate HAVING clauses
- 40c2428307b8 18.1 landed
- 18d261409348 19 (unreleased) landed
-
Allow pushdown of HAVING clauses with grouping sets
- 67a54b9e83d3 18.0 cited
-
Mark expressions nullable by grouping sets
- f5050f795aea 18.0 cited
On Wed, 24 Sept 2025 at 02:39, Tom Lane <tgl@sss.pgh.pa.us> wrote: > Is there anything we can salvage from 67a54b9e, or should > we just revert it? It doesn't seem great that we need to reconsider the safety of that optimisation post-release. It's not as if 67a54b9e added several cases to test for and got one of them wrong. It's a case of the 1 case it did add wasn't fully thought through. As for fixing it; testing for a Const-false havingClause can't be done as that only works for this case which const-folding happens to figure out during planning. You could equally have something Var-less like: create or replace function one() returns int as $$ begin return 1; end; $$ stable language plpgsql; SELECT 'XXX',count(*) FROM t GROUP BY ROLLUP(id) HAVING NOT one()=1; which isn't known at plan-time. For me, I can't see how to make this safe and I suspect due to your above question that you're in a similar situation. Reverting and reconsidering for v19 seems like the safest option. Let's see what Richard thinks. David