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>
Cc: pgsql-bugs <pgsql-bugs@lists.postgresql.org>, aleksander@timescale.com
Date: 2024-08-07T06:57:39Z
Lists: pgsql-bugs

Attachments

狂奔的蜗牛 <1105066510@qq.com> 于2024年8月7日周三 13:35写道:

> this case will enter `if (IsA(groupexpr, RelabelType))` branch.
>
> We set "C" as groupkey's collation, and it's not equal to column's.
> In transformGroupClause(), syntax `COLLATE xxx` will create CollateExpr
> node, and CollateExpr's arg is Var node.
> And then, planner will call eval_const_expressions_mutator() to transform
> CollateExpr to RelableType if CollateExpr->collOid not equal to
> Collate->arg's collation.
>

Yech. Thanks for the explanation.
Because exprCollation() return the resultcollid if the nodetag is
Relabletype, the expr() && PartKeyCollMatchesExprColl() can handle this
situation.
So we don't need "if (IsA(groupexpr, RelableTyple) " this branch.


>
>
> About V3 patch, PartCollMatchesExprColl() may be not suitable, because
> collation of partkey must be equal to groupkey's, even though they are all
> InvalidOid.
>

I'm not sure about what you said.  I uesd it because partition prune do
this way. I keep it temporarily.

The test case in v3 patch only has EXPLAIN statement. I add SELECT
statement and make the result more stable according to Aleksander advices.
-- 
Tender Wang

Commits

  1. Disallow partitionwise grouping when collations don't match

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