我正在学习postgresql,我有一个源文件,有一个varchar类型的字段,它的值是这样的:
20190625
20190626
20190627
20190628
20190629
20190630
字符串
现在我想用这个字段的第一个字符来分区,也就是说,用年份来分区,
我试着这样做:
partition by range(substr(str, 1,4));
型
但是这不起作用,我想按年分区。例如,如果有10年,那么创建10个分区,如果有20年,那么20个分区。分区的数量是不固定的,怎么做?
1条答案
按热度按时间5cnsuln71#
正如在注解中提到的,
date
本来是一个更好的数据类型,但是由于日期至少是“year-month-day”的形式,所以列上的简单范围分区应该这样做:字符串
这是因为在这种格式中,日期顺序、数字顺序和字符串顺序是相同的。
确保将
COLLATE "C"
添加到列定义中,以使字符串比较尽可能便宜。我会添加一个检查约束,以确保数据始终具有这种格式。