适用版本
OceanBase 数据库社区版 V4.2 之前版本。
问题现象
创建表组时,分区字段为其他类型(int、varchar 以外),在创建分区表并指定表组时报错。具体如下:
创建如下表组:
CREATE TABLEGROUP table_group_xx PARTITION BY RANGE COLUMNS 1
(
partition p20230410 values less than ('2023-04-10 00:00:00'),
partition p20250106 values less than ('2025-01-06 00:00:00'),
partition p_max values less than (MAXVALUE)
);
创建分区表并指定表组:
CREATE TABLE `a` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`chat_id` bigint(20) NOT NULL,
`uid` bigint(20) DEFAULT NULL,
`create_time` datetime NOT NULL COMMENT '创建时间',
`update_time` datetime DEFAULT NULL,
PRIMARY KEY (`id`, `create_time`),
KEY `idx_create_time` (`create_time`) BLOCK_SIZE 16384 LOCAL
) TABLEGROUP = table_group_xx
partition by range columns(`create_time`)
(
partition p20230410 values less than ('2023-04-10 00:00:00'),
partition p20250106 values less than ('2025-01-06 00:00:00'),
partition p_max values less than (MAXVALUE)
);
报错信息如下:
ERROR 4179 (HY000): range or list partition with not matched collation or value not allowed
问题原因
在创建表组的时候,range columns 1,表示分区字段只有一个,并且为常量,如果想指定分区字段为其他类型(int、varchar 以外),需要显示指定列类型。
解决方法
创建表组时为分区字段指定列类型,上述创建表组语句修改如下:
CREATE TABLEGROUP table_group_xx PARTITION BY RANGE COLUMNS 1
(
partition p20230410 values less than (timestamp '2023-04-10 00:00:00'),
partition p20250106 values less than (timestamp '2025-01-06 00:00:00'),
partition p_max values less than (MAXVALUE)
);