📄️ 数据类型
通用数据类型
📄️ Array 类型
ARRAY 列用于存储固定大小的数组。列中的所有字段必须具有相同长度和相同的底层类型。数组通常用于存储数字数组,但也可以包含任何统一的数据类型,包括 ARRAY、LIST 和 STRUCT 类型。
📄️ Bitstring 类型
| 名称 | 别名 | 描述 |
📄️ Blob 类型
| 名称 | 别名 | 描述 |
📄️ Boolean 类型
| 名称 | 别名 | 描述 |
📄️ 日期类型
| 名称 | 别名 | 描述 |
📄️ Enum 数据类型
| 名称 | 描述 |
📄️ Interval 类型
INTERVAL 表示可加到或减去 DATE、TIMESTAMP、TIMESTAMPTZ 或 TIME 值的时间段。
📄️ List 类型
LIST 列用于编码值列表。列中的字段长度可以不同,但底层类型必须一致。LIST 通常用于存储数字数组,也可以包含任意统一数据类型,包括其他 LIST 与 STRUCT。
📄️ 字面量类型
Goose 提供了特殊的字面量类型,用于在查询中表示 NULL、整数和字符串字面量。它们有各自的绑定与转换规则。
📄️ Map 类型
MAP 与 STRUCT 的相似之处在于,它们都是有序的键值对列表。但 MAP 不要求每一行都具有相同的键,因此适用于预先未知 schema 或每行 schema 不同的场景。
📄️ NULL 值
NULL 值是 SQL 中用于表示数据缺失的特殊值。任意类型的列都可以包含 NULL 值。从逻辑上看,NULL 可理解为“该字段的值未知”。
📄️ 数值类型
固定宽度整数类型
📄️ Struct 数据类型
从概念上讲,STRUCT 列包含一个有序的字段列表(称为 “entries”)。这些 entry 通过字符串名称引用。本文将这些 entry 名称称为 key。STRUCT 列中的每一行都必须具有相同 key。struct entry 名称是 schema 的一部分,因此 STRUCT 列中的每一行都必须具有相同布局。struct entry 名称不区分大小写。
📄️ 文本类型
在 Goose 中,字符串可存储在 VARCHAR 字段中。
📄️ 时间类型
TIME 和 TIMETZ 类型用于表示一天中的小时、分钟、秒和微秒。
📄️ 时间戳类型
时间戳表示时间点。因此,它结合了 DATE 与 TIME 信息。
📄️ Time Zone Reference List
此列表的最新版本可通过 pgtimezonenames() 表函数获取:
📄️ Typecasting
类型转换是一种将某种数据类型中的值转换为另一种数据类型中最接近对应值的操作。
📄️ Union Type
UNION type(不要与 SQL UNION operator 混淆)是一种嵌套类型,可在多个“备选”值中持有其一,类似 C 语言中的 union。主要区别在于,这里的 UNION 类型是 tagged unions,因此总会携带一个用于区分当前持有哪个备选值的“tag”,即使内部值本身为 null 也是如此。因此,UNION 类型更接近 C++17 的 std::variant、Rust 的 Enum,或多数函数式语言中的“sum type”。