基于varchar字段的第一个字母的分区表

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

我有一个庞大的表(超过1B记录),具有表分区的特定要求:

(1)是否可以根据varchar字段的第一个字符对Postgres中的表进行分区?

例如:

对于以下3条记录:

a-blah
a-blah2
b-blah

a-blaha-blah2将进入“A”分区,b-blah将进入“B”分区。

(2)如果使用Postgres无法实现上述目标,那么平均分割大型增长表的好方法是什么? (没有按创建日期分区 - 因为这不是这些记录所具有的)。

database postgresql
1个回答
0
投票

您可以在partition by子句中使用表达式,例如:

create table my_table(name text)
partition by list (left(name, 1));

create table my_table_a
partition of my_table
for values in ('a');

create table my_table_b
partition of my_table
for values in ('b');

结果:

insert into my_table 
values
    ('abba'), ('alfa'), ('beta');

select 'a' as partition, name from my_table_a
union all
select 'b' as partition, name from my_table_b;

 partition | name 
-----------+------
 a         | abba
 a         | alfa
 b         | beta
(3 rows)

如果分区应该不区分大小写,则可以使用

create table my_table(name text)
partition by list (lower(left(name, 1)));

阅读文档:

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