Re: BUG #18568: BUG: Result wrong when do group by on partition table!

Tender Wang <tndrwang@gmail.com>

From: Tender Wang <tndrwang@gmail.com>
To: 1105066510@qq.com, pgsql-bugs@lists.postgresql.org
Date: 2024-08-06T09:27:07Z
Lists: pgsql-bugs

Attachments

Tender Wang <tndrwang@gmail.com> 于2024年8月6日周二 16:42写道:

> Yeah, I can reproduce $subject on HEAD.
> But  I found this when debug into group_by_has_partkey(), as below:
> call nodeToString(groupexprs):
> VAR : varcollid 16384
> call nodeToString(partexpr):
> VAR: varcollid 16384
>
> So the collid of partkey and groupexpr is same, so add check here may not
> fix this issue.
>
> I continue to find out why the collation id of partkey is 16384(e.g.
> case_insensitive). The partkey expr info is
> set in set_baserel_partition_key_exprs(), which it uses
> partkey->parttypcoll[cnt] value not  partkey->partcollation value.
>
> And partkey->parttypcoll[cnt] is assigned from pg_attribute , which is the
> column c meta data.
> Should we use partkey->partcollation value?  I try to fix that in the
> attached patch. I add your case in the test, and I don't find
> failed regress.
>

The plan seems not what we want, because I forgot to
set enable_partitionwise_aggregate to true.


-- 
Tender Wang

Commits

  1. Disallow partitionwise grouping when collations don't match

  2. For partitionwise join, match on partcollation, not parttypcoll.