测试 Postgres table 分区的 HASH 函数
Test HASH function for Postgres table partitioning
我正在使用 Postgres 11,并且想在主键是 UUID 的 table 上使用哈希分区。我知道我需要预先 select 多个分区,并且主键上哈希函数的模数将用于为每个分区分配行。
像这样:
CREATE TABLE new_table ( id uuid ) PARTITION BY HASH (id);
CREATE TABLE new_table_0 PARTITION OF new_table FOR VALUES WITH (MODULUS 3, REMAINDER 0);
CREATE TABLE new_table_1 PARTITION OF new_table FOR VALUES WITH (MODULUS 3, REMAINDER 1);
CREATE TABLE new_table_2 PARTITION OF new_table FOR VALUES WITH (MODULUS 3, REMAINDER 2);
documentation 提到了 "the hash value of the partition key" 但没有具体说明散列是如何发生的。我想针对现有数据测试此哈希函数,以查看不同数量分区的分布模式。像这样:
SELECT unknown_partition_hash_function(id) AS hash_value, COUNT(id) AS number_of_records
FROM existing_table
GROUP BY 1
有没有办法在 SELECT 语句中使用此哈希函数?
应该使用hash_any
。它似乎没有以任何可直接访问的方式公开。
我正在使用 Postgres 11,并且想在主键是 UUID 的 table 上使用哈希分区。我知道我需要预先 select 多个分区,并且主键上哈希函数的模数将用于为每个分区分配行。
像这样:
CREATE TABLE new_table ( id uuid ) PARTITION BY HASH (id);
CREATE TABLE new_table_0 PARTITION OF new_table FOR VALUES WITH (MODULUS 3, REMAINDER 0);
CREATE TABLE new_table_1 PARTITION OF new_table FOR VALUES WITH (MODULUS 3, REMAINDER 1);
CREATE TABLE new_table_2 PARTITION OF new_table FOR VALUES WITH (MODULUS 3, REMAINDER 2);
documentation 提到了 "the hash value of the partition key" 但没有具体说明散列是如何发生的。我想针对现有数据测试此哈希函数,以查看不同数量分区的分布模式。像这样:
SELECT unknown_partition_hash_function(id) AS hash_value, COUNT(id) AS number_of_records
FROM existing_table
GROUP BY 1
有没有办法在 SELECT 语句中使用此哈希函数?
应该使用hash_any
。它似乎没有以任何可直接访问的方式公开。