Disallow partitionwise grouping when collations don't match If the collation of any grouping column doesn’t match the collation of the corresponding partition key, partitionwise grouping can yield incorrect results. For example, rows that would be grouped under the grouping collation may end up in different partitions under the partitioning collation. In such cases, full partitionwise grouping would produce results that differ from those without partitionwise grouping, so disallowed that.
Partial partitionwise aggregation is still allowed, as the Finalize step reconciles partition-level aggregates with grouping requirements across all partitions, ensuring that the final output remains consistent. This commit also fixes group_by_has_partkey() by ensuring the RelabelType node is stripped from grouping expressions when matching them to partition key expressions to avoid false mismatches. Bug: #18568 Reported-by: Webbo Han <1105066...@qq.com> Author: Webbo Han <1105066...@qq.com> Reviewed-by: Tender Wang <tndrw...@gmail.com> Reviewed-by: Aleksander Alekseev <aleksan...@timescale.com> Reviewed-by: Jian He <jian.universal...@gmail.com> Discussion: https://postgr.es/m/18568-2a9afb6b9f7e6...@postgresql.org Discussion: https://postgr.es/m/tencent_9d9103cda420c07768349cc1dff88465f...@qq.com Discussion: https://postgr.es/m/cahewxnno_hkiq6pqylyfuqdtwp7kkhzih1j7pqyz0nr+ps2...@mail.gmail.com Backpatch-through: 12 Branch ------ REL_14_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/96f9b29a3e1ea3dd58e728814bf630d40ff77caa Modified Files -------------- src/backend/optimizer/plan/planner.c | 44 ++++++++++--- src/test/regress/expected/collate.icu.utf8.out | 90 ++++++++++++++++++++++++++ src/test/regress/sql/collate.icu.utf8.sql | 37 +++++++++++ 3 files changed, 163 insertions(+), 8 deletions(-)