在postgresql 11中动态选择哈希分区

在postgresql 11中动态选择哈希分区,postgresql,hash,database-partitioning,postgresql-11,Postgresql,Hash,Database Partitioning,Postgresql 11,如何编写一个select查询,从父(已分区)表中进行选择,该表使用哈希分区(Postgresql 11中新增)进行分区,转换为从单个分区中选择所有记录 我想要这个 CREATE TABLE parent_table ( col1 ..... ) PARTITION BY HASH (col1); CREATE TABLE child_table_0 PARTITION OF parent_table FOR VALUES WITH (MODULUS 15, REMAINDER 0);

如何编写一个select查询,从父(已分区)表中进行选择,该表使用哈希分区(Postgresql 11中新增)进行分区,转换为从单个分区中选择所有记录

我想要这个

CREATE TABLE parent_table (
  col1
  .....
) PARTITION BY HASH (col1);

CREATE TABLE child_table_0
PARTITION OF parent_table FOR VALUES WITH (MODULUS 15, REMAINDER 0);

[...]

CREATE TABLE child_table_14
PARTITION OF parent_table FOR VALUES WITH (MODULUS 15, REMAINDER 14);

-- Query in question
EXPLAIN
SELECT
    *
FROM parent_table
WHERE some_undocumented_hash_expression(col1, 15) = C
归还此计划

Append  (cost=0.00..67.44 rows=X width=Y)
  ->  Seq Scan on child_table_C  (cost=0.00..67.38 rows=X width=Y)
        Filter: ([?????????]=C)
我知道的备选方案

  • 按表达式列表分区
    按列表分区(col1%15)
    。。。对于(0)
    中的值,使用
    选择,其中col1%15=0
  • 使用辅助列存储(缓存)表达式值

  • 有没有更直接的方法?当我实际使用散列进行分区时,我想避开按列表分区,但要做到这一点,我需要一种方法来选择正确的分区,而不必编写动态SQL,也不必使它比按列表分区(散列表达式)更复杂。

    其中col1=xxx
    将选择正确的分区。是的,但它不会选择整个分区,而只选择一行。我需要它的原因是在一个键上连接两个大表,这恰好是表的分区所在