【发布时间】:2021-07-14 19:44:23
【问题描述】:
有没有办法知道哪个分区将用于由具有文本值的列分区的表中的新行?
用例是: 根据文本列,我有一个带有许多分区的大表。我需要在该表中插入更新数百万个新行。如果我知道每一行将使用哪些分区,我可以重新安排我的批量插入更新,使其一次仅适用于 1 个分区。
-> hashtext 函数经过测试,它没有给出正确的分区值。
【问题讨论】:
-
哈希分区的唯一原因是为了分配 I/O,所以我不明白你为什么要避免这种情况。
-
链接的帖子并没有真正回答这个问题。 'b' 使用模数 8 余数 6 进行分区,但
hashtext('b')=-68,821,088如何解释呢? -
@LaurenzAlbe 当然,您有时可能希望分配 IO(如正常操作),但不是其他(如批量加载,将分区索引缓存在 RAM 中可能非常重要)。如果您只想无条件且不受控制地分配 IO,那为什么还要分区呢?只需使用 RAID/JBOD。
-
@jjanes 真;
hashtext不是答案。除了传播 I/O 之外,是否有充分的理由进行哈希分区? -
INSERT和SELECT占用的锁不冲突,所以我认为这里没有问题。
标签: postgresql hash partition