PostgreSQL分区语法FOR VALUES

问题描述 投票:1回答:1

我正在研究PostgreSQL中的表分区。

我为我的主表创建了一个分区:

CREATE TABLE head_partition_table PARTITION OF master_table 
FOR VALUES FROM (DATE_START) TO (DATE_END)
PARTITION BY RANGE (ENTITY_ID, GROUP_NAME);

之后,我想将head_partition_table划分为更小的分区,所以我写了代码:

CREATE TABLE subpartition_table OF head_partititon_table 
FOR VALUES FROM ('0', 'A') TO ('0', 'Z');

我找不到如何指定单个值而不是范围。

就像是

CREATE TABLE subpartition_table OF head_partititon_table 
FOR VALUES ('0', 'A');
CREATE TABLE subpartition_table OF head_partititon_table 
FOR VALUES  ('0', 'Z');

我得到了一个syntax error at or near "("

这可能吗?

附:我试过PARTITION BY LIST,但在那种情况下,我只能使用一个字段。

postgresql syntax partitioning
1个回答
0
投票

您可以通过引入另一层分区来按列表对列表进行分区:

CREATE TABLE head_partition_table PARTITION OF master_table 
   FOR VALUES FROM ('2019-01-01') TO ('2020-01-01')
   PARTITION BY LIST (entity_id);

CREATE TABLE subpartition1 PARTITION OF head_partition_table
   FOR VALUES IN ('0')
   PARTITION BY LIST (group_name);

CREATE TABLE subsubpartition1 PARTITION OF subpartition1
   FOR VALUES IN ('A');

但这更像是一种学术活动而非有用的东西。

任何超过最多几百个分区的东西都不会表现得很好。

© www.soinside.com 2019 - 2024. All rights reserved.