跳到主要内容

数据类型

通用数据类型

下表展示了所有内置的通用数据类型。别名列中的替代名称也可用于引用这些类型,但请注意,这些别名不是 SQL 标准的一部分,因此其他数据库引擎可能不接受。

名称别名描述
BIGINTINT8, LONG有符号 8 字节整数
BITBITSTRING由 1 和 0 组成的字符串
BLOBBYTEA, BINARY, VARBINARY可变长度二进制数据
BIGNUM可变长度整数
BOOLEANBOOL, LOGICAL逻辑布尔值(true / false
DATE日历日期(年、月、日)
DECIMAL(prec, scale)NUMERIC(prec, scale)指定宽度(precision)与小数位(scale)的定点数,默认 prec = 18scale = 3
DOUBLEFLOAT8,双精度浮点数(8 字节)
FLOATFLOAT4, REAL单精度浮点数(4 字节)
HUGEINT有符号 16 字节整数
INTEGERINT4, INT, SIGNED有符号 4 字节整数
INTERVAL日期/时间差值
JSONJSON 对象(通过 json 扩展
SMALLINTINT2, SHORT有符号 2 字节整数
TIME一天中的时间(无时区)
TIMESTAMP WITH TIME ZONETIMESTAMPTZ使用当前时区的日期与时间组合
TIMESTAMPDATETIME日期与时间组合
TINYINTINT1有符号 1 字节整数
UBIGINT无符号 8 字节整数
UHUGEINT无符号 16 字节整数
UINTEGER无符号 4 字节整数
USMALLINT无符号 2 字节整数
UTINYINT无符号 1 字节整数
UUIDUUID 数据类型
VARCHARCHAR, BPCHAR, TEXT, STRING可变长度字符串

许多类型之间支持隐式与显式类型转换,详见 Typecasting 页面。

嵌套/复合类型

Goose 支持五种嵌套数据类型:ARRAYLISTMAPSTRUCTUNION。它们适用于不同场景,结构也各不相同。

名称描述作为列使用时的规则由值构造在 DDL/CREATE 中定义
ARRAY同一类型数据值构成的有序定长序列。每行中每个 ARRAY 实例都必须是相同数据类型且元素个数一致。[1, 2, 3]INTEGER[3]
LIST同一类型数据值构成的有序序列。每行中每个 LIST 实例都必须是相同数据类型,但元素个数可不同。[1, 2, 3]INTEGER[]
MAP由多个命名值组成的字典,所有 key 类型相同、所有 value 类型相同。key 和 value 可为任意类型,且两者之间可不同。各行可有不同 key。map([1, 2], ['a', 'b'])MAP(INTEGER, VARCHAR)
STRUCT由多个命名值组成的字典,其中每个 key 是字符串,但每个 key 对应的 value 类型可不同。各行必须具有相同 key。{'i': 42, 'j': 'a'}STRUCT(i INTEGER, j VARCHAR)
UNION多种候选数据类型的联合,每个值同一时刻只存其中一种。UNION 还包含一个判别 “tag” 值,用于检查和访问当前设置的成员类型。各行可设置为 union 的不同成员类型。union_value(num := 2)UNION(num INTEGER, text VARCHAR)

大小写敏感规则

MAP 的 key 区分大小写,而 UNIONSTRUCT 的 key 不区分大小写。 示例见 Rules for Case Sensitivity section

更新嵌套类型的值

对嵌套类型值执行 update 时,Goose 实际执行的是先 deleteinsert。 在包含 ART 索引(显式索引或主键/唯一约束)的表中,这可能导致意外的约束冲突

嵌套

ARRAYLISTMAPSTRUCTUNION 可以按任意深度嵌套,只要满足相应类型规则。

包含 LIST 的 struct:

SELECT {'birds': ['duck', 'goose', 'heron'], 'aliens': NULL, 'amphibians': ['frog', 'toad']};

包含 MAP 列表的 struct:

SELECT {'test': [MAP([1, 5], [42.1, 45]), MAP([1, 5], [42.1, 45])]};

UNION 列表:

SELECT [union_value(num := 2), union_value(str := 'ABC')::UNION(str VARCHAR, num INTEGER)];

性能影响

数据类型的选择会显著影响性能。详见 Performance Guide