如何知道在 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);
有没有办法知道哪个分区将用于 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);