数据类型
ProtonBase 是一款兼容 PostgreSQL (PG) 协议的分布式数据库,支持丰富的数据类型,包括基本数据类型、复合类型和特殊类型,适用于大规模数据存储和高并发查询场景。
本文档重点介绍 ProtonBase 支持的 基本数据类型 和 复合数据类型,包含各类型的取值范围说明。
基本数据类型
数值类型
类型 | 描述 | 取值范围 | 示例 |
---|---|---|---|
SMALLINT | 2 字节有符号整数 | -32,768 到 32,767 | SMALLINT '32767' |
INT / INTEGER | 4 字节有符号整数 | -2,147,483,648 到 2,147,483,647 | INT '2147483647' |
BIGINT | 8 字节有符号整数 | -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 | BIGINT '9223372036854775807' |
DECIMAL(p,s) | 精确小数,p 为精度,s 为小数位数 | 精度 p 最大 1000,存储空间可变 | DECIMAL(10,2) '1234.56' |
NUMERIC | 同 DECIMAL | 同 DECIMAL | NUMERIC(5,3) '12.345' |
REAL | 4 字节单精度浮点数 | 约 ±1.18e-38 到 ±3.40e38,精度 6 位小数 | REAL '3.4028235e38' |
FLOAT / DOUBLE | 8 字节双精度浮点数 | 约 ±2.23e-308 到 ±1.79e308,精度 15 位小数 | FLOAT '1.7976931348623157e308' |
字符串类型
类型 | 描述 | 取值范围 | 示例 |
---|---|---|---|
CHAR(n) | 定长字符串,不足补空格 | 最大长度 1,000,000 字符 | CHAR(10) 'hello' |
VARCHAR(n) | 变长字符串,最大长度 n | 最大长度 1,000,000 字符 | VARCHAR(255) 'world' |
TEXT | 不限长度的文本 | 理论无限制(实际受存储限制) | TEXT 'This is a long text...' |
日期和时间类型
类型 | 描述 | 取值范围 | 示例 |
---|---|---|---|
DATE | 日期(年月日) | 4713 BC 到 294276 AD | DATE '2023-10-01' |
TIME | 时间(时分秒) | 00:00:00 到 24:00:00 | TIME '14:30:00' |
TIMESTAMP | 日期和时间(无时区) | 4713 BC 到 294276 AD,精度微秒级 | TIMESTAMP '2023-10-01 14:30:00' |
TIMESTAMPTZ | 带时区的时间戳 | 同 TIMESTAMP ,但存储时区信息 | TIMESTAMPTZ '2023-10-01 14:30:00+08' |
INTERVAL | 时间间隔 | -178,000,000 年到 178,000,000 年 | INTERVAL '1 day 2 hours' |
布尔类型
类型 | 描述 | 取值范围 | 示例 |
---|---|---|---|
BOOLEAN | 真/假值 | true /false 或 1 /0 | BOOLEAN 'true' |
二进制类型
类型 | 描述 | 取值范围 | 示例 |
---|---|---|---|
BYTEA | 二进制数据 | 最大 1 GB(实际受存储限制) | BYTEA '\xDEADBEEF' |
复合数据类型
数组类型
支持存储同类型的多个值,最大维度 6 维,单元素大小受 TOAST
存储限制(通常 1 GB)。
示例:
-- 定义数组列
CREATE TABLE products (
id INT,
tags VARCHAR(20)[] -- 字符串数组
);
-- 插入数据
INSERT INTO products VALUES (1, ARRAY['electronics', 'gadget']);
-- 查询
SELECT tags[1] FROM products WHERE id = 1; -- 返回 'electronics'
JSON / JSONB
类型 | 描述 | 存储限制 |
---|---|---|
JSON | 文本格式,保留空格和顺序 | 同 TEXT (理论无限制) |
JSONB | 二进制格式,支持索引和高效查询 | 同 TEXT (实际受存储限制) |
示例:
CREATE TABLE user_profiles (
id INT,
profile JSONB
);
INSERT INTO user_profiles VALUES (1, '{"name": "Alice", "age": 30}');
-- 查询 JSON 字段
SELECT profile->>'name' FROM user_profiles WHERE id = 1; -- 返回 "Alice"
特殊数据类型
UUID
存储 128 位全局唯一标识符,格式为 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
。
示例:
CREATE TABLE orders (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
amount DECIMAL(10,2)
);
枚举类型(ENUM)
定义固定值的字符串枚举,最多支持 1,000 个枚举值。
示例:
CREATE TYPE status AS ENUM ('pending', 'completed', 'failed');
CREATE TABLE tasks (
id INT,
task_status status
);
INSERT INTO tasks VALUES (1, 'pending');