数据库服务器何时使用定点变更算法

对于您在 ALTER TABLE 语句的 ADD、DROP 和 MODIFY 子句中指定的特定操作类型,数据库服务器将使用定点变更算法。

变更表来执行以下操作时,数据库服务器使用定点变更算法:
要点: 表包含扩展的数据类型、VARCHAR 数据类型、BOOLEAN 数据类型或智能大对象时,即使所变更的列包含内置数据类型,数据库服务器也不会使用定点变更算法。

表 1 显示在哪些条件下 ALTER TABLE MODIFY 语句使用定点变更算法来处理 ALTER TABLE MODIFY 语句。

表 1. 使用定点变更算法的 MODIFY 操作和条件
对列的操作 条件
将 SMALLINT 列转换为 INTEGER 列 All
将 SMALLINT 列转换为 INT8 或 BIGINT 列 All
将 SMALLINT 列转换成 DEC(p2,s2) 列 p2-s2 >= 5
将 SMALLINT 列转换成 DEC(p2) 列 p2-s2 >= 5 OR nf
将 SMALLINT 列转换成 SMALLFLOAT 列 All
将 SMALLINT 列转换成 FLOAT 列 All
将 SMALLINT 列转换成 CHAR(n) 列 n >= 6 AND nf
将 INT 列转换成 INT8 列 All
将 INT 列转换成 DEC(p2,s2) 列 p2-s2 >= 10
将 INT 列转换成 DEC(p2) 列 p2 >= 10 OR nf
将 INT 列转换成 SMALLFLOAT 列 nf
将 INT 列转换成 FLOAT 列 All
将 INT 列转换成 CHAR(n) 列 n >= 11 AND nf
将 SERIAL 列转换成 INT8 列 All
将 SERIAL 列转换成 DEC(p2,s2) 列 p2-s2 >= 10
将 SERIAL 列转换成 DEC(p2) 列 p2 >= 10 OR nf
将 SERIAL 列转换成 SMALLFLOAT 列 nf
将 SERIAL 列转换成 FLOAT 列 All
将 SERIAL 列转换成 CHAR(n) 列 n >= 11 AND nf
将 SERIAL 列转换成 SERIAL 列 All
将 SERIAL 列转换成 SERIAL8 列 All
将 DEC(p1,s1) 列转换成 SMALLINT 列 p1-s1 < 5 AND (s1 == 0 OR nf)
将 DEC(p1,s1) 列转换成 INTEGER 列 p1-s1 < 10 AND (s1 == 0 OR nf)
将 DEC(p1,s1) 列转换成 INT8 列 p1-s1 < 20 AND (s1 == 0 OR nf)
将 DEC(p1,s1) 列转换成 SERIAL 列 p1-s1 < 10 AND (s1 == 0 OR nf)
将 DEC(p1,s1) 列转换成 SERIAL8 或 BIGSERIAL 列 p1-s1 < 20 AND (s1 == 0 OR nf)
将 DEC(p1,s1) 列转换成 DEC(p2,s2) 列 p2-s2 >= p1-s1 AND (s2 >= s1 OR nf)
将 DEC(p1,s1) 列转换成 DEC(p2) 列 p2 >= p1 OR nf
将 DEC(p1,s1) 列转换成 SMALLFLOAT 列 nf
将 DEC(p1,s1) 列转换成 FLOAT 列 nf
将 DEC(p1,s1) 列转换成 CHAR(n) 列 n >= 8 AND nf
将 DEC(p1) 列转换成 DEC(p2) 列 p2 >= p1 OR nf
将 DEC(p1) 列转换成 SMALLFLOAT 列 nf
将 DEC(p1) 列转换成 FLOAT 列 nf
将 DEC(p1) 列转换成 CHAR(n) 列 n >= 8 AND nf
将 SMALLFLOAT 列转换成 DEC(p2) 列 nf
将 SMALLFLOAT 列转换成 FLOAT 列 nf
将 SMALLFLOAT 列转换成 CHAR(n) 列 n >= 8 AND nf
将 FLOAT 列转换成 DEC(p2) 列 nf
将 FLOAT 列转换成 SMALLFLOAT 列 nf
将 FLOAT 列转换成 CHAR(n) 列 n >= 8 AND nf
将 CHAR(m) 列转换成 CHAR(n) 列 n >= m OR (nf AND not ANSI mode)
增加 CHARACTER 列的长度 Not ANSI mode
增加 DECIMAL 或 MONEY 列的长度 All
附加信息