-
以下为 PostgreSQL 主要数据类型详细说明:
| 类型分类 | 数据类型 | 描述 | 特别说明 |
|---|---|---|---|
| 数值类型 |
INTEGER, BIGINT, SMALLINT
|
整数类型,范围依次递增(231、263等) |
SERIAL 系列(如 BIGSERIAL)为自增序列类型,常用于主键 |
| 浮点型 |
REAL, DOUBLE PRECISION
|
单/双精度浮点数,精度分别为6位和15位 | 不适用于精确计算(如货币),推荐用 NUMERIC
|
| 字符类型 |
VARCHAR(n), TEXT
|
变长字符串(长度限制或无限制) |
TEXT 类型性能优于 VARCHAR,无需指定长度 |
| 日期/时间 |
DATE, TIMESTAMP, INTERVAL
|
存储日期、时间戳(带或不带时区)及时间间隔 |
TIMESTAMPTZ 自动转换为 UTC 存储 |
| 布尔类型 | BOOLEAN |
存储 TRUE/FALSE,支持 NULL
|
实际存储为1字节,非真/假时默认为 NULL
|
| 几何类型 | GEOMETRY |
存储空间数据(点、线、面等),需安装 PostGIS 扩展 | 支持空间函数(如 ST_Distance)和空间索引,格式为 WKT(如 POINT(0 0)) |
| JSON/JSONB |
JSON, JSONB
|
存储结构化 JSON 数据,JSONB 为二进制格式,支持索引和高效查询 |
JSONB 自动去重、压缩空格,查询性能更优 |
| 网络地址 |
INET, CIDR, MACADDR
|
存储 IPv4/IPv6 地址、子网掩码和 MAC 地址 | 提供专用函数校验和操作网络地址(如子网包含判断) |
| UUID | UUID |
存储全局唯一标识符(128位),如 a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11
|
需通过扩展生成(如 uuid-ossp),常用于分布式系统主键 |
-
设置主键 ID 自增的方法
方法1:使用 SERIAL 类型
CREATE TABLE users (
id SERIAL PRIMARY KEY, -- 自动创建序列并关联,等价于 INTEGER 类型
name TEXT
);
• 原理:SERIAL 隐式创建名为 表名_id_seq 的序列,并通过 nextval() 自动递增。
方法2:自定义序列(SEQUENCE)
CREATE SEQUENCE user_id_seq START 1; -- 创建序列
CREATE TABLE users (
id INTEGER PRIMARY KEY DEFAULT nextval('user_id_seq'), -- 手动关联序列
name TEXT
);
ALTER SEQUENCE user_id_seq OWNED BY users.id; -- 绑定序列到表字段
方法3:IDENTITY 列(PostgreSQL 10+)
CREATE TABLE users (
id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, -- 符合 SQL 标准
name TEXT
);
• 特点:与 SERIAL 类似,但提供更严格的控制(如禁止手动插入 ID)。
重置自增值:
ALTER SEQUENCE user_id_seq RESTART WITH 1000; -- 将序列重置为1000