我正在研究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
,但在那种情况下,我只能使用一个字段。
您可以通过引入另一层分区来按列表对列表进行分区:
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');
但这更像是一种学术活动而非有用的东西。
任何超过最多几百个分区的东西都不会表现得很好。