ALTER INTERVAL 分区总是不成功

TiDB 版本:8.5.3

表 schema:

CREATE TABLE `range_test` (
  `id` bigint unsigned NOT NULL AUTO_INCREMENT,
  `content` text NOT NULL,
  `created` datetime NOT NULL,
  PRIMARY KEY (`id`,`created`) /*T![clustered_index] CLUSTERED */,
  KEY `idx_id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
PARTITION BY RANGE COLUMNS (`created`)
INTERVAL(1 YEAR)
FIRST PARTITION LESS THAN ('2025-01-01')
LAST PARTITION LESS THAN ('2026-01-01')
NULL PARTITION;

执行 first、last 分区更新都失败:

ALTER TABLE `range_test` FIRST PARTITION LESS THAN ('2024-01-01');
ALTER TABLE `range_test` LAST PARTITION LESS THAN ('2027-01-01');

提示错误分别是:

Error Code: 8200. Unsupported FIRST PARTITION, does not seem like an INTERVAL partitioned table
Error Code: 8200. Unsupported LAST PARTITION, does not seem like an INTERVAL partitioned table

解决了,不要 NULL PARTITION 就可以 alter。文档里好似没说?

感觉像缺陷

tidb当前版本8.5.3,不支持对已存在的interval分区表使用alter table … first/last partition less than语法,这是已知限制。

:thinking:看文档中的这一句,感觉不应该报错才对。

文档说: 在 TiDB 中修改 INTERVAL 分区的 FIRST PARTITION和 LAST PARTITION时出现 “不支持” 错误,主要原因是 TiDB 对 INTERVAL 分区的 ALTER操作存在语法限制,尤其是在 8.5.3 版本中,对 FIRST PARTITION`和 LAST PARTITION的直接修改尚未完全支持。

:thinking:在哪看的?官方文档示例里是支持这种写法的。

忘了是在那个文档里看到了,正好看到这个类似问题