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

Mer*_*çen 3 postgresql hash partition

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

用例是:我有一个大表,根据文本列有许多分区。我需要向该表插入更新数百万个新行。如果我知道每行将使用哪些分区,我可以重新安排批量插入更新,使其一次仅适用于 1 个分区。

-> hashtext 函数经过测试,它没有给出正确的分区值。

Lau*_*lbe 8

对代码进行逆向工程,可以通过以下语句得到分区号:

SELECT (hashtextextended('value', 8816678312871386365)::numeric + 5305509591434766563) % 8;
Run Code Online (Sandbox Code Playgroud)

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

您可以使用 测试分区号satisfies_hash_partition。要测试是否'value'最终位于表中第 6 个分区(共 8 个分区)中tab,您可以运行

SELECT satisfies_hash_partition('tab'::regclass, 8, 6, 'value'::text);
Run Code Online (Sandbox Code Playgroud)