使用普通方式执行修改列类型操作时,数据节点DN上会阻塞DML,影响业务执行。PolarDB-X新增在线修改列类型(Online Modify Column,简称OMC)功能,允许以在线方式修改列类型。

注意事项

限制

目前使用在线修改列类型时有如下限制:

  • 仅5.4.15及以上版本支持该功能。
  • 一条ALTER TABLE语句只支持对一列进行修改。
  • 修改的列不能是自增列。
  • 修改的列不能是主键中的列。
  • 修改的列不能是主表或GSI的拆分键中的列。
  • 修改的列不能是包含在GSI中的列(此项限制可以通过执行/*+TDDL: cmd_extra(OMC_ALTER_TABLE_WITH_GSI=true)*/ 解除)。
  • 表中不能存在全文索引。
类型
支持类型可以分为4类:
  • 准确值类型:tinyint、tinyint unsigned、smallint、smallint unsigned、mediumint、mediumint unsigned、int、int unsigned、bigint、bigint unsigned、decimal。
  • 近似值类型:float、double。
  • 字符串类型:char、varchar、binary、varbinary。
  • 日期时间类型:date、datetime、time、year。
对于以上4种类型,有以下限制:
  • 只支持同一类类型之间的转换。
  • 修改前后的类型不能相同(varchar、varbinary等类型长度不同视为不同类型)。

使用方法

ALTER TABLE语句中未指定ALGORITHM算法或指定为其它算法,例如INPLACE或COPY时,默认使用普通的方式执行,会阻塞DML的执行。当ALGORITHM算法指定为OMC时,则使用在线修改列类型方式执行。

示例
  • 执行以下命令,创建测试表t1:
    CREATE TABLE t1(a int primary key, b tinyint) dbpartition by hash(a);
  • 执行以下命令,修改t1表的列类型:
    ALTER TABLE t1 MODIFY COLUMN b int, ALGORITHM=OMC;
  • 执行以下命令,修改t1表中b列的名称和类型:
    ALTER TABLE t1 CHANGE COLUMN b c bigint, ALGORITHM=OMC;
说明 如果在该列上创建了局部索引,那么在DDL执行过程中,执行 SHOW CREATE TABLE时有可能看到DDL创建的临时局部索引。此外,如果SQL中使用FORCE INDEX指定了该列上的局部索引,那么在DDL的执行过程中,该SQL有可能会短暂执行失败。