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

相关文档