postgres.git / summary / log / commit / refs

commit    2af28e603319224e87fd35ab62f36ef6de45eaac
Author:   Robert Haas <rhaas@postgresql.org>
Date:     Wed Feb 28 17:16:09 2018 +0000
First released in: 11.0

    For partitionwise join, match on partcollation, not parttypcoll.
    
    The previous code considered two tables to have the partition scheme
    if the underlying columns had the same collation, but what we
    actually need to compare is not the collations associated with the
    column but the collation used for partitioning.  Fix that.
    
    Robert Haas and Amit Langote
    
    Discussion: http://postgr.es/m/0f95f924-0efa-4cf5-eb5f-9a3d1bc3c33d@lab.ntt.co.jp


src/backend/optimizer/util/plancat.c | 6 +++--- src/include/nodes/relation.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/backend/optimizer/util/plancat.c b/src/backend/optimizer/util/plancat.c index 60f21711f4f..b799e249db8 100644 --- a/src/backend/optimizer/util/plancat.c +++ b/src/backend/optimizer/util/plancat.c @@ -1891,7 +1891,7 @@ find_partition_scheme(PlannerInfo *root, Relation relation) sizeof(Oid) * partnatts) != 0 || memcmp(partkey->partopcintype, part_scheme->partopcintype, sizeof(Oid) * partnatts) != 0 || - memcmp(partkey->parttypcoll, part_scheme->parttypcoll, + memcmp(partkey->partcollation, part_scheme->partcollation, sizeof(Oid) * partnatts) != 0) continue; @@ -1926,8 +1926,8 @@ find_partition_scheme(PlannerInfo *root, Relation relation) memcpy(part_scheme->partopcintype, partkey->partopcintype, sizeof(Oid) * partnatts); - part_scheme->parttypcoll = (Oid *) palloc(sizeof(Oid) * partnatts); - memcpy(part_scheme->parttypcoll, partkey->parttypcoll, + part_scheme->partcollation = (Oid *) palloc(sizeof(Oid) * partnatts); + memcpy(part_scheme->partcollation, partkey->partcollation, sizeof(Oid) * partnatts); part_scheme->parttyplen = (int16 *) palloc(sizeof(int16) * partnatts); diff --git a/src/include/nodes/relation.h b/src/include/nodes/relation.h index db8de2dfd0c..d576aa7350f 100644 --- a/src/include/nodes/relation.h +++ b/src/include/nodes/relation.h @@ -351,7 +351,7 @@ typedef struct PartitionSchemeData int16 partnatts; /* number of partition attributes */ Oid *partopfamily; /* OIDs of operator families */ Oid *partopcintype; /* OIDs of opclass declared input data types */ - Oid *parttypcoll; /* OIDs of collations of partition keys. */ + Oid *partcollation; /* OIDs of partitioning collations */ /* Cached information about partition key data types. */ int16 *parttyplen; [parent: 73797b7884ee]