| 整数 |
|---|
| 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() 已内置。 |