我正在学习PostgreSQL,我有一个源文件,其字段为varchar类型,其值如下:
20190625
20190626
20190627
20190628
20190629
20190630
现在我要按该字段的前几个字符进行分区,即按年份进行分区
我尝试这样做:
partition by range(substr(str, 1,4));
但是那不起作用,我想按年份划分,例如,如果有10年,则划分为10个分区,如果有20年,则划分为20个分区,划分的数量不是固定的,该怎么办那?
答案 0 :(得分:1)
如评论中所述,date
本来是一种更好的数据类型,但是由于日期至少采用“年-月-日”的形式,因此该列上的简单范围划分应该可以做到:>
CREATE TABLE data (...)
PARTITION BY RANGE (str);
CREATE TABLE data_2019
PARTITION OF data FOR VALUES FROM ('20190101') TO ('20200101');
这是因为以这种格式,日期顺序,数字顺序和字符串顺序是相同的。
确保将COLLATE "C"
添加到列定义中,以使字符串比较尽可能便宜。
我将添加一个检查约束,以确保数据始终具有这种格式。