跳转到内容

数据类型

PetraDB 遵循 PostgreSQL 的 SQL 语法、标识符处理和类型转换约定。

  • 大小写不敏感的关键字SELECTselectSelect 等价
  • 未加引号的标识符折叠 — 未加引号的标识符折叠为小写(CREATE TABLE Users → 表名 users
  • 双引号标识符 — 保留大小写("MixedCase" 保持原样)
  • 字符串转义 — 双单引号('it''s')和 E-字符串(E'it\'s'
  • 运算符!=<> 都表示不等于
类型描述
SMALLINT16 位整数(-32768 到 32767)
INT / INTEGER32 位整数
BIGINT64 位整数
SMALLSERIAL自增 16 位整数(创建后备序列)
SERIAL自增 32 位整数(创建后备序列)
BIGSERIAL自增 64 位整数(创建后备序列)
DOUBLE / FLOAT / REAL双精度浮点数
NUMERIC(p,s) / DECIMAL(p,s)定精度小数
TEXT变长字符串
CHAR(n)定长字符串(右补空格)
VARCHAR(n)变长字符串(最大 n 个字符,不补充)
BOOLEAN真/假
DATE日历日期(yyyy-MM-dd
TIME时间(HH:mm:ss
TIMESTAMP日期和时间
TIMESTAMP WITH TIME ZONE带时区偏移的日期和时间
INTERVAL持续时间(ISO 8601 或 N days N hours N minutes N seconds
UUID通用唯一标识符
JSON / JSONB结构化 JSON 对象和数组
BYTEA二进制数据
ENUM自定义枚举类型(通过 CREATE TYPE ... AS ENUM
INT[]TEXT[]类型化数组(任何基本类型加 [] 后缀)

使用 :: 运算符或 CAST(expr AS type) 在类型之间转换:

SELECT '2024-06-15'::DATE;
SELECT CAST('14:30:00' AS TIME);
SELECT '2 hours 30 minutes'::INTERVAL;
SELECT CAST(val AS TEXT);
SELECT '42'::INT;
SELECT 1::BOOLEAN;
SELECT EXTRACT(year FROM created_at);
SELECT '2024-01-01'::DATE + 10; -- 添加天数
SELECT '2024-01-15'::DATE - '2024-01-10'::DATE; -- 两日期之间的天数
SELECT now() + '2 hours'::INTERVAL; -- 时间戳 + 间隔
SELECT now() - '30 minutes'::INTERVAL; -- 时间戳 - 间隔
SELECT '1 hour'::INTERVAL * 3; -- 缩放间隔
SELECT EXTRACT(year FROM now()); -- 提取字段
SELECT date_trunc('month', now()); -- 截断
PRIMARY KEY (id)
UNIQUE (email)
NOT NULL
DEFAULT value
FOREIGN KEY (col) REFERENCES other_table (col) ON DELETE CASCADE ON UPDATE CASCADE