更新时间:2025-10-22 GMT+08:00
U0400057:GaussDB 不支持表的分区键中使用函数
描述
GaussDB 不支持表的分区键中使用函数。
数据库类型与版本
- 源库类型与版本:MySQL 5.5、5.6、5.7、8.0 版本。
- 目标库类型与版本:GaussDB 所有版本。
语法示例
create table test_to
(
id date,
id2 date
)
partition by range (to_days(id2))
(
partition p1 values less than (100),
partition p2 values less than (maxvalue)
);
改造建议
方案一:
新增冗余列,触发器保证其值始终与原始分区表达式结果一致,并以该冗余列作为新的分区依据。
适用于GaussDB 集中式B兼容模式和GaussDB 分布式MySQL兼容模式。
示例:
create table test_to
(
id date,
id2 date,
COLUMN1 bigint
)
partition by range (COLUMN1)
(
partition p1 values less than (100),
partition p2 values less than (maxvalue)
);
CREATE OR REPLACE FUNCTION FUNC_test_to RETURN TRIGGER
as
BEGIN
NEW.COLUMN1=to_days(new.id2);
RETURN NEW;
END;
/
CREATE TRIGGER TRI_test_to
BEFORE insert or update ON test_to
FOR EACH ROW
EXECUTE PROCEDURE FUNC_test_to();
方案二:
业务改造。GaussDB M 兼容不支持触发器,无法使用方案一。