postgresql 如何按varchar类型字段的年份进行分区

u4dcyp6a  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(158)

我正在学习postgresql,我有一个源文件,有一个varchar类型的字段,它的值是这样的:

20190625
20190626
20190627
20190628
20190629
20190630

字符串
现在我想用这个字段的第一个字符来分区,也就是说,用年份来分区,
我试着这样做:

partition by range(substr(str, 1,4));


但是这不起作用,我想按年分区。例如,如果有10年,那么创建10个分区,如果有20年,那么20个分区。分区的数量是不固定的,怎么做?

5cnsuln7

5cnsuln71#

正如在注解中提到的,date本来是一个更好的数据类型,但是由于日期至少是“year-month-day”的形式,所以列上的简单范围分区应该这样做:

CREATE TABLE data (...)
PARTITION BY RANGE (str);

CREATE TABLE data_2019
PARTITION OF data FOR VALUES FROM ('20190101') TO ('20200101');

字符串
这是因为在这种格式中,日期顺序、数字顺序和字符串顺序是相同的。
确保将COLLATE "C"添加到列定义中,以使字符串比较尽可能便宜。
我会添加一个检查约束,以确保数据始终具有这种格式。

相关问题