postgres-github.git / summary / log / commit / refs

commit    f76686ce7f77e57456ad3644f2f6b4280181d1f4
Author:   Richard Guo <rguo@postgresql.org>
Date:     Fri May 01 02:13:50 2026 +0000

    Fix HAVING-to-WHERE pushdown with nondeterministic collations
    
    When GROUP BY uses a nondeterministic collation, the planner's
    optimization of moving HAVING clauses to WHERE can produce incorrect
    query results.  The HAVING clause may apply a stricter collation that
    distinguishes values the GROUP BY considers equal.  Pushing such a
    clause to WHERE causes it to filter individual rows before grouping,
    potentially eliminating group members and changing aggregate results.
    
    Fix this by detecting collation conflicts before flatten_group_exprs,
    while the HAVING clause still contains GROUP Vars (Vars referencing
    RTE_GROUP).  At that point, each GROUP Var directly carries the GROUP
    BY collation as its varcollid, making it straightforward to compare
    against the operator's inputcollid.  A mismatch where the GROUP BY
    collation is nondeterministic means the clause is unsafe to push down.
    RowCompareExpr is treated specially, since it carries per-column
    inputcollids[] rather than a single inputcollid.
    
    The conflicting clause indices are recorded in a Bitmapset and
    consulted during the existing HAVING-to-WHERE loop, so that only
    affected clauses are kept in HAVING; other safe clauses in the same
    query are still pushed.
    
    Back-patch to v18 only.  The fix relies on the RTE_GROUP mechanism
    introduced in v18 (commit 247dea89f), which is what lets us identify
    grouping expressions and their resolved collations via GROUP Vars on
    pre-flatten havingQual.  Pre-v18 branches lack that machinery, so a
    back-patch there would need a different approach.  Given the absence
    of field reports of this bug on back branches, the risk of carrying a
    different fix on stable branches is not justified.
    
    Author: Richard Guo <guofenglinux@gmail.com>
    Reviewed-by: wenhui qiu <qiuwenhuifx@gmail.com>
    Discussion: https://postgr.es/m/CAMbWs48Dn2wW6XM94GZsoyMiH42=KgMo+WcobPKuWvGYnWaPOQ@mail.gmail.com
    Backpatch-through: 18

[parent: 410013d2a591]