测试 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。它似乎没有以任何可直接访问的方式公开。

hash_any