跳到主要内容
版本:1.0.14

数据类型

Halo 数据库在 PostgreSQL 兼容模式下支持完整的 PostgreSQL 数据类型。

数值类型

类型存储大小范围
SMALLINT2 字节-32768 到 +32767
INTEGER / INT4 字节-2147483648 到 +2147483647
BIGINT8 字节-9223372036854775808 到 +9223372036854775807
REAL4 字节6 位十进制数字精度
DOUBLE PRECISION8 字节15 位十进制数字精度
NUMERIC(p,s) / DECIMAL(p,s)可变小数点前 131072 位,小数点后 16383 位
SERIAL4 字节自增整数(1 到 2147483647)
-- 整数类型
CREATE TABLE int_test (
id SERIAL PRIMARY KEY,
small_num SMALLINT,
num INTEGER,
big_num BIGINT
);
INSERT INTO int_test (small_num, num, big_num) VALUES (-32768, 2147483647, 9223372036854775807);
SELECT * FROM int_test;

-- 高精度小数
CREATE TABLE numeric_test (
id SERIAL PRIMARY KEY,
price NUMERIC(10,2),
ratio DECIMAL(30,20)
);
INSERT INTO numeric_test (price, ratio) VALUES (12345.67, 123456.78901234567890123456);
SELECT * FROM numeric_test;

字符类型

类型说明最大长度
CHAR(n) / CHARACTER(n)定长字符串10485760
VARCHAR(n) / CHARACTER VARYING(n)变长字符串10485760
TEXT变长字符串1 GB
CREATE TABLE char_test (
id SERIAL PRIMARY KEY,
fixed_char CHAR(10),
variable_char VARCHAR(100),
long_text TEXT
);
INSERT INTO char_test (fixed_char, variable_char, long_text)
VALUES ('hello', 'world', 'This is a long text field');

日期/时间类型

类型存储大小说明
DATE4 字节日期(无时间)
TIME8 字节时间(无日期)
TIMETZ12 字节带时区的时间
TIMESTAMP8 字节日期和时间
TIMESTAMPTZ8 字节带时区的日期和时间
INTERVAL16 字节时间间隔
CREATE TABLE datetime_test (
id SERIAL PRIMARY KEY,
a_date DATE,
a_time TIME,
a_timestamp TIMESTAMP,
a_timestamptz TIMESTAMPTZ,
a_interval INTERVAL
);

INSERT INTO datetime_test (a_date, a_time, a_timestamp, a_timestamptz, a_interval)
VALUES ('2024-01-01', '12:34:56', '2024-01-01 12:34:56', '2024-01-01 12:34:56+00',
'3 years 4 months 1 day 2 hours 30 minutes 15 seconds');

-- 日期加减与格式化
SELECT CURRENT_DATE + INTERVAL '10 days';
SELECT to_char(a_timestamp, 'YYYY-MM-DD HH24:MI:SS') AS formatted_date FROM datetime_test;

布尔类型

CREATE TABLE bool_test (
a BOOL,
b BOOLEAN
);
INSERT INTO bool_test VALUES ('y', 'n'), (TRUE, FALSE);
SELECT * FROM bool_test;

二进制类型

CREATE TABLE bytea_test (
id SERIAL PRIMARY KEY,
data BYTEA
);
INSERT INTO bytea_test (data) VALUES ('\x48656C6C6F20576F726C64');
SELECT * FROM bytea_test;

高级数据类型

-- JSON 和 XML
CREATE TABLE advanced_test (
json_data JSON,
xml_data XML
);
INSERT INTO advanced_test VALUES (
'{"name":"Halo","version":"16"}'::JSON,
'<title>Halo Database</title>'::XML
);
SELECT * FROM advanced_test;