在postgresql 11中动态选择哈希分区
如何编写一个select查询,从父(已分区)表中进行选择,该表使用哈希分区(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);
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
将选择正确的分区。是的,但它不会选择整个分区,而只选择一行。我需要它的原因是在一个键上连接两个大表,这恰好是表的分区所在