当前位置: 首页 > news >正文

PostgreSQL数据类型一览(数值类型)

文章目录

  • **一、数值类型**
    • **1. 整数类型**
      • - **smallint**:2 字节,范围 -32768 到 32767,适合存储小范围整数,节省存储空间。
      • - **integer (int)**:4 字节,范围 -2147483648 到 2147483647,最常用的整数类型。
      • - **bigint**:8 字节,范围 -9223372036854775808 到 9223372036854775807,用于需要超大范围的场景。
    • **2. 浮点类型**
      • - **real**:4 字节,单精度浮点数,约 6 位有效数字,适合科学计算但存在精度损失。
      • - **double precision**:8 字节,双精度浮点数,约 15 位有效数字,精度更高。
    • **3. 精确数值类型**
      • - **decimal/numeric**:可变长度,用户指定精度(如 `numeric(10,2)` 表示总共 10 位,小数部分 2 位),完全精确,适用于金融计算。
      • - **serial/bigserial**:自增整数类型(`serial` 对应 `integer`,`bigserial` 对应 `bigint`),底层通过序列实现,常用于主键。
    • **4. 特殊浮点值**
      • - **Infinity / -Infinity**:表示正负无穷(需用单引号包裹,如 `'Infinity'::float`)。
      • - **NaN**:非数字值(Not a Number),比较时 PostgreSQL 视为相等,且大于所有非 NaN 值。
  • **二、字符串类型**
    • **1. 可变长度字符串**
      • - **text**:无长度限制的字符串,适合存储任意长度的文本。
      • - **varchar(n)**:最多 n 字符的字符串(n 最大 10^6),超出会报错。
      • - **character varying(n)**:与 `varchar(n)` 等价,SQL 标准写法。
    • **2. 固定长度字符串**
      • - **char(n)**:固定 n 字符长度,不足补空格,适合长度固定的字段(如国家代码)。
      • - **character(n)**:与 `char(n)` 等价。
  • **三、日期与时间类型**
    • **1. 日期类型**
      • - **date**:存储日期(年-月-日),占用 4 字节。
      • - **time [without time zone]**:存储时间(时:分:秒),不带时区,占用 8 字节。
      • - **time with time zone**:带时区的时间,占用 12 字节。
      • - **timestamp [without time zone]**:日期和时间组合,不带时区,占用 8 字节。
      • - **timestamp with time zone (timestamptz)**:带时区的日期时间,自动转换为 UTC 存储,占用 8 字节。
    • **2. 时间间隔**
      • - **interval [fields] [precision]**:表示时间段(如 `interval '3 days'`),可指定精度(如秒的小数位数)。
  • **四、布尔类型**
      • - **boolean**:1 字节,存储 `true`、`false` 或 `null`,支持逻辑运算(`AND`、`OR`、`NOT`)。
  • **五、二进制数据类型**
      • - **bytea**:存储二进制数据(如文件、图片),支持十六进制或转义格式输入(如 `E'\\xDEADBEEF'`)。
  • **六、JSON 类型**
    • **1. JSON**
      • - **json**:存储 JSON 数据,查询时不验证格式,适合存储原始 JSON。
      • - **jsonb**:以二进制格式存储 JSON,支持索引和高效查询,但会丢失键顺序和空格。
    • **2. JSON 函数**
      • - 提供丰富的函数(如 `json_extract_path`、`json_agg`)进行数据操作。
  • **七、数组类型**
      • - **array**:支持所有基本类型的数组(如 `int[]`、`text[]`),使用方括号访问元素(如 `arr[1]`)。
      • - 支持多维数组和嵌套数组。
  • **八、范围类型(Range Types)**
      • - **numrange**:数值范围(如 `[1.1, 5.5]`)。
      • - **tsrange**:时间范围(不带时区)。
      • - **tstzrange**:带时区的时间范围。
      • - **int4range/int8range**:整数范围。
      • - **daterange**:日期范围。
  • **九、网络地址类型**
      • - **inet**:IPv4/IPv6 地址和子网(如 `'192.168.1.0/24'`)。
      • - **cidr**:IPv4/IPv6 子网地址。
      • - **macaddr**:MAC 地址(如 `'08:00:2b:01:02:03'`)。
  • **十、UUID 类型**
      • - **uuid**:存储通用唯一标识符(UUID),格式如 `123e4567-e89b-12d3-a456-426614174000`。
  • **十一、几何类型**
      • - **point**:二维点(如 `(x,y)`)。
      • - **line**:直线。
      • - **lseg**:线段。
      • - **box**:矩形框。
      • - **path**:闭合或开放的路径。
      • - **polygon**:多边形。
      • - **circle**:圆(中心点和半径)。
  • **十二、文本搜索类型**
      • - **tsvector**:文本搜索向量(分词后的文本)。
      • - **tsquery**:文本搜索查询条件(如 `'fat & (cat | dog)'`)。
  • **十三、XML 类型**
      • - **xml**:存储 XML 数据,支持验证和 XPath 查询。
  • **十四、HStore 类型**
      • - **hstore**:键值对存储(如 `"color"=>"red", "size"=>"large"`),适合存储稀疏数据。
  • **十五、枚举类型**
      • - **enum**:用户自定义枚举类型(如 `CREATE TYPE color AS ENUM ('red', 'blue')`)。
  • **十六、复合类型**
      • - **composite type**:由多个字段组成的类型(如表的行类型),可通过 `ROW()` 构造。
  • **十七、伪类型**
      • - **void**:表示无返回值。
      • - **anyelement/anyarray/anynonarray**:用于函数泛型(如 `+` 运算符支持任意类型)。
      • - **cstring**:C 风格字符串,用于扩展开发。
  • **十八、其他特殊类型**
      • - **pg_lsn**:日志序列号(Log Sequence Number),用于复制。
      • - **txid_snapshot**:事务快照(用于并发控制)。
      • - **ltree**:扩展类型,支持层级路径(需安装 `ltree` 扩展)。
      • - **tsm_system_rows/tsm_system_time**:用于表采样。
  • **使用建议**
      • - **高精度计算**:优先使用 `numeric`。
      • - **存储 JSON**:优先使用 `jsonb` 以提高查询性能。
      • - **时间处理**:带时区的场景必须使用 `timestamptz`。
      • - **数组与范围**:适合需要批量操作或区间查询的场景。
      • - **网络地址**:使用 `inet` 或 `cidr` 进行子网匹配和地址校验。

一、数值类型

1. 整数类型

- smallint:2 字节,范围 -32768 到 32767,适合存储小范围整数,节省存储空间。

- integer (int):4 字节,范围 -2147483648 到 2147483647,最常用的整数类型。

- bigint:8 字节,范围 -9223372036854775808 到 9223372036854775807,用于需要超大范围的场景。

2. 浮点类型

- real:4 字节,单精度浮点数,约 6 位有效数字,适合科学计算但存在精度损失。

- double precision:8 字节,双精度浮点数,约 15 位有效数字,精度更高。

3. 精确数值类型

- decimal/numeric:可变长度,用户指定精度(如 numeric(10,2) 表示总共 10 位,小数部分 2 位),完全精确,适用于金融计算。

- serial/bigserial:自增整数类型(serial 对应 integerbigserial 对应 bigint),底层通过序列实现,常用于主键。

4. 特殊浮点值

- Infinity / -Infinity:表示正负无穷(需用单引号包裹,如 'Infinity'::float)。

- NaN:非数字值(Not a Number),比较时 PostgreSQL 视为相等,且大于所有非 NaN 值。


二、字符串类型

1. 可变长度字符串

- text:无长度限制的字符串,适合存储任意长度的文本。

- varchar(n):最多 n 字符的字符串(n 最大 10^6),超出会报错。

- character varying(n):与 varchar(n) 等价,SQL 标准写法。

2. 固定长度字符串

- char(n):固定 n 字符长度,不足补空格,适合长度固定的字段(如国家代码)。

- character(n):与 char(n) 等价。


三、日期与时间类型

1. 日期类型

- date:存储日期(年-月-日),占用 4 字节。

- time [without time zone]:存储时间(时:分:秒),不带时区,占用 8 字节。

- time with time zone:带时区的时间,占用 12 字节。

- timestamp [without time zone]:日期和时间组合,不带时区,占用 8 字节。

- timestamp with time zone (timestamptz):带时区的日期时间,自动转换为 UTC 存储,占用 8 字节。

2. 时间间隔

- interval [fields] [precision]:表示时间段(如 interval '3 days'),可指定精度(如秒的小数位数)。


四、布尔类型

- boolean:1 字节,存储 truefalsenull,支持逻辑运算(ANDORNOT)。


五、二进制数据类型

- bytea:存储二进制数据(如文件、图片),支持十六进制或转义格式输入(如 E'\\xDEADBEEF')。


六、JSON 类型

1. JSON

- json:存储 JSON 数据,查询时不验证格式,适合存储原始 JSON。

- jsonb:以二进制格式存储 JSON,支持索引和高效查询,但会丢失键顺序和空格。

2. JSON 函数

- 提供丰富的函数(如 json_extract_pathjson_agg)进行数据操作。


七、数组类型

- array:支持所有基本类型的数组(如 int[]text[]),使用方括号访问元素(如 arr[1])。

- 支持多维数组和嵌套数组。


八、范围类型(Range Types)

- numrange:数值范围(如 [1.1, 5.5])。

- tsrange:时间范围(不带时区)。

- tstzrange:带时区的时间范围。

- int4range/int8range:整数范围。

- daterange:日期范围。


九、网络地址类型

- inet:IPv4/IPv6 地址和子网(如 '192.168.1.0/24')。

- cidr:IPv4/IPv6 子网地址。

- macaddr:MAC 地址(如 '08:00:2b:01:02:03')。


十、UUID 类型

- uuid:存储通用唯一标识符(UUID),格式如 123e4567-e89b-12d3-a456-426614174000


十一、几何类型

- point:二维点(如 (x,y))。

- line:直线。

- lseg:线段。

- box:矩形框。

- path:闭合或开放的路径。

- polygon:多边形。

- circle:圆(中心点和半径)。


十二、文本搜索类型

- tsvector:文本搜索向量(分词后的文本)。

- tsquery:文本搜索查询条件(如 'fat & (cat | dog)')。


十三、XML 类型

- xml:存储 XML 数据,支持验证和 XPath 查询。


十四、HStore 类型

- hstore:键值对存储(如 "color"=>"red", "size"=>"large"),适合存储稀疏数据。


十五、枚举类型

- enum:用户自定义枚举类型(如 CREATE TYPE color AS ENUM ('red', 'blue'))。


十六、复合类型

- composite type:由多个字段组成的类型(如表的行类型),可通过 ROW() 构造。


十七、伪类型

- void:表示无返回值。

- anyelement/anyarray/anynonarray:用于函数泛型(如 + 运算符支持任意类型)。

- cstring:C 风格字符串,用于扩展开发。


十八、其他特殊类型

- pg_lsn:日志序列号(Log Sequence Number),用于复制。

- txid_snapshot:事务快照(用于并发控制)。

- ltree:扩展类型,支持层级路径(需安装 ltree 扩展)。

- tsm_system_rows/tsm_system_time:用于表采样。


使用建议

- 高精度计算:优先使用 numeric

- 存储 JSON:优先使用 jsonb 以提高查询性能。

- 时间处理:带时区的场景必须使用 timestamptz

- 数组与范围:适合需要批量操作或区间查询的场景。

- 网络地址:使用 inetcidr 进行子网匹配和地址校验。

http://www.dtcms.com/a/358999.html

相关文章:

  • Spring和mybatis整合后事务拦截器TransactionInterceptor开启提交事务流程
  • 【Java实战⑧】Java常用类实战:解锁String、Object与包装类的奥秘
  • STL中的容器,迭代器
  • 规律作息 + 养成好的习惯 + 考研倒计时 111 天 + 线面积分入门 1 下半部分
  • 【路由器】TP Link 路由器为何无法进入管理后台
  • HarmonyOS AppStorage:跨组件状态管理的高效解决方案
  • 2025年06月 Scratch 图形化(二级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • 大模型训练中的 logits 是什么
  • npm基础
  • SNMPv3开发--snmpd.conf
  • Vue加载速度优化,verder.js和element.js加载速度慢解决方法
  • VGG改进(6):基于PyTorch的VGG16-SE网络实战
  • 项目管理方法适用场景对比
  • Linux kernel arm64 启动流程
  • ubuntu 安装conda, ubuntu24安装miniConda
  • python制作一个股票盯盘系统
  • 三重积分从入门到入土
  • 微风PLC编程软件下载(C4G02_Develop)
  • GESP5级2024年03月真题解析
  • Python实现全角数字转半角数字的完整教程
  • 一站式可视化运维:解锁时序数据库 TDengine 的正确打开方式
  • 数值分析——算法的稳定性
  • 鸿蒙服务端开发资料汇总
  • 中级统计师-统计实务-第三章 国民经济核算
  • 从支付工具到收益资产:稳定币在 Berachain 上的二次进化
  • 数位 dp
  • 函数(1)
  • React useState基本使用
  • 鸿蒙ArkTS 核心篇-13-if分支语句
  • 玄机靶场 | 第五届红明谷-异常行为溯源