支持的数据类型

更新时间:
复制 MD 格式

设计使用列存索引(IMCI)的表结构时,需要先确认目标列的数据类型是否在支持范围内。列存索引支持写入和查询整数与数值、字符串与二进制、日期和时间等类别的 PostgreSQL 数据类型,也支持部分数组类型。Enum、复合类型和 Domain 暂不支持,CREATE CSI、ALTER TYPE 和 ADD COLUMN 三类 DDL 场景的类型限制也存在差异。

支持范围

列存索引支持的标量数据类型如下表所示。排序规则和 DDL 场景会对部分类型附加使用条件,具体规则见使用限制。

类别

支持的数据类型

整数与数值

SMALLINT/INT2、INTEGER/INT4、BIGINT/INT8、NUMERIC/DECIMAL、REAL/FLOAT4、DOUBLE PRECISION/FLOAT8、MONEY、OID

字符串与二进制

"char"、CHARACTER/CHAR/BPCHAR、VARCHAR、TEXT、NAME、BYTEA

日期和时间

DATE、TIME、TIME WITH TIME ZONE/TIMETZ、TIMESTAMP、TIMESTAMP WITH TIME ZONE/TIMESTAMPTZ、INTERVAL

其他标量

BOOLEAN、UUID、JSON、JSONB、XML、BIT、BIT VARYING

此外,列存索引还支持以下数组类型:

  • 整数与数值:SMALLINT[]、INTEGER[]、BIGINT[]、NUMERIC[]、REAL[]、DOUBLE PRECISION[]、OID[]

  • 字符串与二进制:CHAR[]、VARCHAR[]、TEXT[]、BYTEA[]

  • 日期和时间:DATE[]、TIME[]、TIMETZ[]、TIMESTAMP[]、TIMESTAMPTZ[]、INTERVAL[]

  • 其他标量:BOOLEAN[]、JSON[]、JSONB[]、UUID[]

SERIAL 和 BIGSERIAL 不是独立的存储类型,分别以 INTEGER 和 BIGINT 存储,因此可以作为列存索引的索引列。

使用限制

  • 不支持的类型:列存索引暂不支持 Enum、复合类型和 Domain。

  • 排序规则:非默认排序规则不能用于列存索引的索引列。

  • DDL 场景差异:CREATE CSI、ALTER TYPE 和 ADD COLUMN 三类场景的类型限制并不完全相同。其中 ADD COLUMN 使用非空常量默认值时,只支持具有无损默认值编码器的类型。三类场景的完整类型限制,请参见DDL支持范围与限制。

示例

以下示例创建一张包含多种受支持类型列的表,并为该表创建列存索引。

CREATE TABLE csi_type_example (
  id bigint PRIMARY KEY,
  amount numeric(18, 2),
  occurred_at timestamptz,
  tags text[],
  description text,
  flags bit varying(16)
);

CREATE INDEX csi_type_example_idx ON csi_type_example USING csi;

示例中的各列分别对应支持范围列出的整数与数值(bigint、numeric)、日期和时间(timestamptz)、字符串与二进制(text)、其他标量(bit varying)和数组(text[])类别。