我正在研究 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');
我在“(”或“(”附近出现语法错误
。
这可能吗?
附言我试过 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');
但这与其说是有用的东西,不如说是一种学术练习。
任何超过最多几百个分区的东西都不会表现良好。
关于PostgreSQL 分区语法 FOR VALUES,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55922778/