文档下载建议反馈入口

  • 添加列
  • 查看列
  • 修改列
  • 重命名列
  • 删除列

添加列

用户可以在创建表的时候直接创建表的数据列,也可以使用 ALTER TABLE 语句向表中添加列。每张表最多支持 4096 列。

说明

  • 添加列时需要应用停机,以确保结构变更的原子性、一致性,避免潜在的一致性问题。
  • 目前,KaiwuDB 不支持一次添加多列。

所需权限

用户拥有目标表的 CREATE 权限。

语法格式

参数说明

参数说明
table_name表名,支持通过 <database_name>.<table_name> 指定其他数据库中的表。如未指定,则默认使用当前数据库。
COLUMN可选关键字,是否使用不影响添加列。
IF NOT EXISTS可选关键字,当使用 IF NOT EXISTS 关键字时,如果列名不存在,系统创建列。如果列名存在,系统创建列失败,但不会报错。当未使用 IF NOT EXISTS 关键字时,如果列名不存在,系统创建列。如果列名存在,系统报错,提示列名已存在。
column_name列名,新增列名不得与待修改表的当前列名和标签名重复。列名的最大长度为 128 字节。
data_type数据类型。有关时序表支持的数据类型,参见时序数据类型
NULL可选关键字,默认为 NULL,且只支持 NULL

语法示例

以下示例为 ts_table 表增加一个名为 color 的列。

ALTER TABLE ts_table ADD COLUMN color varchar(30);

查看列

SHOW COLUMNS 语句用于查看表中各列的详细信息,包括列名、标签列名、数据类型以及是否非空。

所需权限

用户拥有目标表的任意权限。

语法格式

参数说明

参数说明
table_name表名,支持通过 <database_name>.<table_name> 指定其他数据库中的表。如未指定,则默认使用当前数据库。

语法示例

以下示例查看 sensor_data 表中各列的详细信息。

SHOW COLUMNS FROM sensor_data;

执行成功后,控制台输出以下信息:

  column_name |  data_type  | is_nullable | column_default | generation_expression |  indices  | is_hidden | is_tag
--------------+-------------+-------------+----------------+-----------------------+-----------+-----------+---------
  k_timestamp | TIMESTAMPTZ |    false    | NULL           |                       | {primary} |   false   | false
  temperature | FLOAT8      |    false    | NULL           |                       | {}        |   false   | false
  humidity    | FLOAT8      |    true     | NULL           |                       | {}        |   false   | false
  pressure    | FLOAT8      |    true     | NULL           |                       | {}        |   false   | false
  sensor_id   | INT4        |    false    | NULL           |                       | {}        |   false   |  true
  sensor_type | VARCHAR(30) |    false    | NULL           |                       | {}        |   false   |  true
(6 rows)

修改列

KaiwuDB 支持通过 ALTER TABLE 语句修改列的数据类型和宽度。

所需权限

用户拥有目标表的 CREATE 权限。

语法格式

参数说明

参数说明
table_name表名,支持通过 <database_name>.<table_name> 指定其他数据库中的表。如未指定,则默认使用当前数据库。
column_name待修改列的名称。
new_type拟修改的数据类型和宽度。
说明
- 转换后的数据类型宽度必须大于原数据类型的宽度。例如,INT4 可以转成 INT8,但不能转成 INT2,CHAR(200) 可以转为 VARCHAR (254), 但不能转为 VARCHAR (100)。
- CHAR、VARCHAR、NCHAR、NVARCHAR 字符类型支持同数据类型的宽度转换,但只能增加宽度不能降低宽度。例如,CHAR(100) 可以转转为 CHAR(200),不能转为 CHAR(50)。有关 KaiwuDB 支持修改的数据类型、默认宽度、最大宽度、可转换的数据类型等详细信息,参见时序数据类型

语法示例

以下示例修改 ts_table 表中 c3 列的数据类型。

ALTER TABLE ts_table ALTER COLUMN c3 TYPE INT8;

重命名列

RENAME COLUMN 语句是 ALTER TABLE 语句的一部分,用于修改表的列名。

所需权限

用户拥有目标表的 CREATE 权限。

语法格式

参数说明

参数说明
table_name表名,支持通过 <database_name>.<table_name> 指定其他数据库中的表。如未指定,则默认使用当前数据库。
old_name当前列名。
new_name拟修改的列名。新增列名不得与待修改表的当前列名和标签名称重复。列名的最大长度为 128 字节。

语法示例

以下示例将 ts_table 表的 c2 列重命名为 c4

ALTER TABLE ts_table RENAME COLUMN c2 TO c4;

删除列

说明

  • 删除列时需要应用停机,待修改的表不在修改过程中,以确保结构变更的原子性、一致性,避免潜在的一致性问题。
  • 删除列时,原表至少保留两列数据列,且不支持删除第一列(时间戳列)。
  • 目前,KaiwuDB 不支持一次删除多个列。

所需权限

用户拥有目标表的 CREATE 权限。

语法格式

参数说明

参数说明
table_name表名,支持通过 <database_name>.<table_name> 指定其他数据库中的表。如未指定,则默认使用当前数据库。
COLUMN可选关键字,是否使用不影响删除列。
IF EXISTS可选关键字,当使用 IF EXISTS 关键字时,如果列名存在,系统删除列。如果列名不存在,系统删除列失败,但不会报错。当未使用 IF EXISTS 关键字时,如果列名存在,系统删除列。如果列名不存在,系统报错,提示列名不存在。
column_name待删除列的名称。

语法示例

以下示例删除 ts_table 表的 c4 列。

ALTER TABLE ts_table DROP c4;