Skip to content

PostgreSQL 数据类型 详解

所有常见的 PostgreSQL 列数据类型,按家族分组:整数、小数、文本、时间、布尔与 UUID、JSON、网络地址、复合类型和扩展类型。每行说明该类型存储什么,以及何时选用它。

PostgreSQL 有几十种类型,但日常的模式设计只会用到一套核心子集。反复出现的选择是:数字用 integer 还是 numeric,字符串用 varchar 还是 text(通常 text 就够了),时间用 timestamp 还是 timestamptz(真实世界的数据优先 timestamptz),以及 json 还是 jsonb(优先 jsonb——它是二进制格式且可建索引)。选择仍然合适的、最具体的类型;数据库会替你强制执行。

参考表格 · 46 条目
46 of 46 rows
整数
2 字节整数,范围 -32768 到 32767。少见;仅在必须节省空间时使用。
4 字节整数,约正负 20 亿。默认的整数列。
8 字节整数,约正负 9 百亿亿。超大的计数值或外部 ID。
自增的 4 字节整数。旧式自动编号键;自 PG 10 起推荐用 GENERATED AS IDENTITY 替代。
serial 的 2 字节和 8 字节变体。与 smallint 或 bigint 列匹配的自动编号。
由表自动生成的整数(GENERATED ALWAYS AS IDENTITY)。现代版 serial;符合 SQL 标准且更能防止手动插入。
小数与浮点数
任意精度的精确小数。金额以及任何不容忍舍入误差的场景。
4 字节单精度浮点数。精度不关键的近似科学数值。
8 字节双精度浮点数。地理空间、统计和机器学习特征值。
带固定区域设置的货币金额。少用;numeric 加应用层货币代码更可移植。
文本
定长文本,以空格填充。已知宽度的编码;很少需要。
变长文本,可加可选的长度上限。有边界限制的字符串,如用户名或邮箱。
变长文本,无长度限制。通用字符串列;相比 varchar 没有性能损失。
时间
不带时间的日历日期。生日和截止日期。
一天中的时间,带或不带时区。每日提醒或营业时间。
不带时区的日期和时间。遗留模式;新项目应避免使用。
以 UTC 存储、按客户端时区显示的日期和时间。任何真实世界时刻的默认选择;优先于 timestamp。
一段时间跨度,如 2 天或 3 小时。时长和日期运算。
布尔、UUID 与字节
真或假。标志位和开关。
128 位全局唯一标识符。可安全暴露的非顺序 ID(在应用中生成或用 gen_random_uuid)。
原始二进制字节。Blob、图片和不透明负载;大文件优先用对象存储。
定长或变长的位串。打包的标志位和协议字段;单个开/关值仍应使用 boolean。
JSON 与半结构化
解析为二进制、可建索引形式的 JSON。灵活或嵌套的数据;推荐的 JSON 列(支持 GIN 索引)。
保留原始文本的 JSON。少见;仅在必须保留键顺序或精确空白时使用。
XML 文本。要求 XML 的遗留集成。
用于导航 JSON 数据的已编译路径表达式。用 jsonb_path_query 和 SQL/JSON 运算符在 jsonb 内过滤。
网络与搜索
IPv4 或 IPv6 主机地址。存储客户端或服务器 IP。
IP 网段块,如 10.0.0.0/24。防火墙规则和子网范围。
6 字节或 8 字节(EUI-64)MAC 地址。设备和网络接口标识。
为全文搜索预处理的文本。在引入独立搜索引擎之前 Postgres 自带的搜索。
用 AND、OR 和前缀运算符组合的搜索词。全文搜索的查询部分,用 @@ 与 tsvector 匹配。
预写日志位置,即日志序列号。复制延迟和备份监控。
复合与高级
任意基础类型的数组,例如 integer[]。简单值的列表;当元素需要自己的列时改用子表。
从你定义的固定列表中取一个值。选项集稳定的状态字段。
由多个字段组成的自定义行类型。跨表共享的重复字段组。
两个边界之间的连续区间。日程、价格区间和版本跨度,配合重叠运算符。
包在你定义的约束里的基础类型。可复用的规则,如非空邮箱,在使用它的每一列上强制执行。
由带类型的值组成的无名行。PL/pgSQL 函数返回值和中间查询结果。
内置的二维几何值。简单平面几何;真实世界的位置需要 PostGIS。
无符号 4 字节系统对象标识符。连接系统目录;不用于应用列。
63 字符的内部标识符字符串。目录查询;面向用户的内容用普通 text。
扩展类型
单个值中的字符串键值对(扩展)。扁平映射;如今 jsonb 覆盖得更好。
层级标签路径,如 news.tech.ai(扩展)。支持祖先和后代查询的树结构。
比较时不区分大小写的文本(扩展)。邮箱等不区分大小写的唯一性,无需 lower() 索引。
来自 PostGIS 扩展的地理和几何对象。距离、包含关系和空间索引查询。
生成 UUID 值的扩展函数。旧式生成方式;自 PG 13 起 gen_random_uuid() 已内置。