Re: BUG #16325: Assert failure on partitioning by int for a text value with a collation

From: Michael Paquier <michael(at)paquier(dot)xyz>
To: Dmitry Dolgov <9erthalion6(at)gmail(dot)com>
Cc: exclusion(at)gmail(dot)com, pgsql-bugs(at)lists(dot)postgresql(dot)org
Subject: Re: BUG #16325: Assert failure on partitioning by int for a text value with a collation
Date: 2020-04-01 07:08:42
Message-ID: 20200401070842.GD142683@paquier.xyz
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs

On Sat, Mar 28, 2020 at 01:53:03PM +0100, Dmitry Dolgov wrote:
> Thanks for reporting! Looks like transformPartitionBoundValue needs to
> check that the source collumn is collatable, then we get more expected
> result:
>
> =# create table part_coll partition of parted for values in ('1' collate "POSIX");
> ERROR: 42804: collations are not supported by type integer

We have here a side effect of 7c079d74, that has given the possibility
to pass down general expressions for partition bounds.

> + if (type_is_collatable(colType))
> + {
> + if (!OidIsValid(exprCollOid))
> + ereport(ERROR,
> + (errcode(ERRCODE_INDETERMINATE_COLLATION),
> + errmsg("could not determine which collation to use for partition expression"),
> + errhint("Use the COLLATE clause to set the collation explicitly.")));
> + }
> + else
> + {
> + if (OidIsValid(exprCollOid))
> + ereport(ERROR,
> + (errcode(ERRCODE_DATATYPE_MISMATCH),
> + errmsg("collations are not supported by type %s",
> + format_type_be(colType))));
> + }
> +

It seems to me that the first error cannot happen, and should not
happen. When the expression is transformed, there is a lookup at the
collation used via transformCollateClause() -> LookupCollation() ->
get_collation_oid() which would never return an invalid OID if the
collation exists, throwing an error instead. The reason why a similar
check exists in tablecmds.c is that there can be a collation override,
no?
--
Michael

In response to

Responses

Browse pgsql-bugs by date

  From Date Subject
Next Message Fujii Masao 2020-04-01 08:27:22 Re: [BUG] non archived WAL removed during production crash recovery
Previous Message Fan Liu 2020-04-01 06:51:14 RE: why wal_max_size does not work?