如何编写从父(分区)表中选择的选择查询,该表使用HASH分区(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)
我所知道的替代方案
PARTITION BY LIST (col1 % 15)
,... FOR VALUES IN (0)
(由WHERE col1 % 15 = 0
选择)进行列表分区还有更直接的方法吗?当我实际上要通过HASH进行分区时,我想摆脱PARTITION BY LIST
,但是要做到这一点,我需要一种选择正确分区的方法,而无需编写动态SQL或使其变得比PARTITION BY LIST (hash_expression)
更复杂。