mirror of
https://github.com/postgres/postgres.git
synced 2025-07-07 00:36:50 +03:00
Fix failure with textual partition hash keys.
Commit 5e1963fb7
overlooked two places in partbounds.c that now
need to pass a collation identifier to the hash functions for
a partition key column.
Amit Langote, per report from Jesper Pedersen
Discussion: https://postgr.es/m/a620f85a-42ab-e0f3-3337-b04b97e2e2f5@redhat.com
This commit is contained in:
@ -99,6 +99,20 @@ ERROR: number of partitioning columns (2) does not match number of partition ke
|
||||
SELECT satisfies_hash_partition('mcinthash'::regclass, 4, 0,
|
||||
variadic array[now(), now()]);
|
||||
ERROR: column 1 of the partition key has type "integer", but supplied value is of type "timestamp with time zone"
|
||||
-- check satisfies_hash_partition passes correct collation
|
||||
create table text_hashp (a text) partition by hash (a);
|
||||
create table text_hashp0 partition of text_hashp for values with (modulus 2, remainder 0);
|
||||
create table text_hashp1 partition of text_hashp for values with (modulus 2, remainder 1);
|
||||
-- The result here should always be true, because 'xxx' must belong to
|
||||
-- one of the two defined partitions
|
||||
select satisfies_hash_partition('text_hashp'::regclass, 2, 0, 'xxx'::text) OR
|
||||
satisfies_hash_partition('text_hashp'::regclass, 2, 1, 'xxx'::text) AS satisfies;
|
||||
satisfies
|
||||
-----------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
-- cleanup
|
||||
DROP TABLE mchash;
|
||||
DROP TABLE mcinthash;
|
||||
DROP TABLE text_hashp;
|
||||
|
@ -75,6 +75,16 @@ SELECT satisfies_hash_partition('mcinthash'::regclass, 4, 0,
|
||||
SELECT satisfies_hash_partition('mcinthash'::regclass, 4, 0,
|
||||
variadic array[now(), now()]);
|
||||
|
||||
-- check satisfies_hash_partition passes correct collation
|
||||
create table text_hashp (a text) partition by hash (a);
|
||||
create table text_hashp0 partition of text_hashp for values with (modulus 2, remainder 0);
|
||||
create table text_hashp1 partition of text_hashp for values with (modulus 2, remainder 1);
|
||||
-- The result here should always be true, because 'xxx' must belong to
|
||||
-- one of the two defined partitions
|
||||
select satisfies_hash_partition('text_hashp'::regclass, 2, 0, 'xxx'::text) OR
|
||||
satisfies_hash_partition('text_hashp'::regclass, 2, 1, 'xxx'::text) AS satisfies;
|
||||
|
||||
-- cleanup
|
||||
DROP TABLE mchash;
|
||||
DROP TABLE mcinthash;
|
||||
DROP TABLE text_hashp;
|
||||
|
Reference in New Issue
Block a user