如何知道在 Postgres 哈希分区中将使用哪个分区?

How to know which partition will be used in Postgres hash partitioning?

有没有办法知道哪个分区将用于 table 中的新行?table 由具有文本值的列分区?

用例是: 我有一个很大的 table,根据文本列有很多分区。我需要向这个 table 插入更新数百万个新行。如果我知道每一行将使用哪些分区,我可以重新安排我的批量插入更新以一次只在 1 个分区上工作。

-> 哈希文本函数已经过测试,它没有给出正确的分区值。

对代码进行逆向,可以得到分区号:

SELECT (hashtextextended('value', 8816678312871386365)::numeric + 5305509591434766563) % 8;

将 8 替换为分区数,将 'value' 替换为相关字符串。

您可以用satisfies_hash_partition测试分区号。要测试 'value' 是否会在 table tab 中的第 6 个分区中的 8 个分区中结束,您可以 运行

SELECT satisfies_hash_partition('tab'::regclass, 8, 6, 'value'::text);