数据类型

ProtonBase 是一款兼容 PostgreSQL (PG) 协议的分布式数据库,支持丰富的数据类型,包括基本数据类型、复合类型和特殊类型,适用于大规模数据存储和高并发查询场景。

本文档重点介绍 ProtonBase 支持的 基本数据类型 和 复合数据类型,包含各类型的取值范围说明。

基本数据类型

数值类型

类型描述取值范围示例
SMALLINT2 字节有符号整数-32,768 到 32,767SMALLINT '32767'
INT / INTEGER4 字节有符号整数-2,147,483,648 到 2,147,483,647INT '2147483647'
BIGINT8 字节有符号整数-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807BIGINT '9223372036854775807'
DECIMAL(p,s)精确小数,p 为精度,s 为小数位数精度 p 最大 1000,存储空间可变DECIMAL(10,2) '1234.56'
NUMERIC同 DECIMAL同 DECIMALNUMERIC(5,3) '12.345'
REAL4 字节单精度浮点数约 ±1.18e-38 到 ±3.40e38,精度 6 位小数REAL '3.4028235e38'
FLOAT / DOUBLE8 字节双精度浮点数约 ±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 ADDATE '2023-10-01'
TIME时间(时分秒)00:00:00 到 24:00:00TIME '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/0BOOLEAN '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');