Skip to content

Commit a11c9c4

Browse files
committed
Check collation when creating partitioned index
When creating a partitioned index, the partition key must be a subset of the index's columns. But this currently doesn't check that the collations between the partition key and the index definition match. So you can construct a unique index that fails to enforce uniqueness. (This would most likely involve a nondeterministic collation, so it would have to be crafted explicitly and is not something that would just happen by accident.) This patch adds the required collation check. As a result, any previously allowed unique index that has a collation mismatch would no longer be allowed to be created. Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://www.postgresql.org/message-id/flat/3327cb54-f7f1-413b-8fdb-7a9dceebb938%40eisentraut.org
1 parent 5b2dcea commit a11c9c4

File tree

1 file changed

+4
-1
lines changed

1 file changed

+4
-1
lines changed

src/backend/commands/indexcmds.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1011,10 +1011,13 @@ DefineIndex(Oid tableId,
10111011
{
10121012
if (key->partattrs[i] == indexInfo->ii_IndexAttrNumbers[j])
10131013
{
1014-
/* Matched the column, now what about the equality op? */
1014+
/* Matched the column, now what about the collation and equality op? */
10151015
Oid idx_opfamily;
10161016
Oid idx_opcintype;
10171017

1018+
if (key->partcollation[i] != collationIds[j])
1019+
continue;
1020+
10181021
if (get_opclass_opfamily_and_input_type(opclassIds[j],
10191022
&idx_opfamily,
10201023
&idx_opcintype))

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy