设置间隔分区间隔值

使用ALTER TABLE … SET INTERVAL语句设置间隔分区表的间隔值,当设置间隔值后,间隔分区表的过度点会移动到当前最后一个子分区表上。

设置间隔分区表间隔值操作主要实现以下:

  • 设置间隔值,将范围分区表转化为间隔分区表。
  • 修改间隔分区表的间隔值,与此同时,使用原间隔值的间隔分区表将会转化为范围分区表,而后新建的间隔分区表将会采用新的间隔值。
  • 修改间隔分区表的表空间存储属性。

可以将间隔分区表转化为范围分区表,已经存在的间隔分区表会自动转化为范围分区表。

当interval分区键是date或timestamp类型时,在设置interval值(单位为month)需要对最后一个分区的的键值进行检查新设置的interval值是否会在扩展时产生错误的日期。

示例:设置间隔分区表间隔值

--  清理环境
DROP TABLE tab;

-- 创建分区表
CREATE TABLE tab 
(
    c1 TIMESTAMP, 
    c2 INT
)
PARTITION BY RANGE(c1)
INTERVAL (INTERVAL '1' DAY)
(
    PARTITION p1 VALUES LESS THAN('2011-1-1'),
    PARTITION p2 VALUES LESS THAN('2011-1-2'),
    PARTITION p3 VALUES LESS THAN('2011-1-3'),
    PARTITION p4 VALUES LESS THAN('2011-1-31')
);

--  删除表和表空间
DROP TABLE tab CASCADE;

如上所示,当用户想设置interval值为1 month时,虽然最后一个分区的键值是31号,在需要扩展时,数据库会自动检查下个月的合法日期并进行扩展,使得2011-1-31加上1个月变成2011-2-28。

当日期部分是在[1,28]号之间时,是不需要检查的,但是29、30、31这三个日期是需要检查的。