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 兼容不支持触发器,无法使用方案一。