PostgreSQL 数据类型2025年3月17日 | 阅读 10 分钟 数据类型指定您希望在表字段中存储什么类型的数据。创建表时,您必须为每个列使用数据类型。它标识特定类型的数据,如整数、布尔值、浮点数等。 在本节中,我们将讨论 PostgreSQL 中使用的各种数据类型。 在 PostgreSQL 中,每个数据库表都有许多列,并且每个列都有精确的数据类型。它支持广泛的数据类型。 此外,用户可以使用 CREATE TYPE SQL 命令创建自己的自定义数据类型。这些数据类型具有以下优点: - 性能:如果正确有效地使用这些数据类型来存储数据值,它会提高我们的性能。
- 验证:正确使用数据类型涉及数据验证和拒绝超出数据类型范围的数据。
- 紧凑性:它存储效率高,因为一个列可以存储单一类型的值。
- 一致性:针对相同数据类型列的操作提供可靠的结果,并且通常是最快的。
在 PostgreSQL 中,我们有许多组数据类型;让我们逐一了解它们:  - 数字数据类型
- 字符数据类型
- 日期/时间数据类型
- 货币数据类型
- 二进制数据类型
- 布尔数据类型
- 枚举数据类型
- 几何数据类型
- 文本搜索数据类型
- UUID 数据类型
- 网络地址类型
- JSON 数据类型
- 位串类型
- XML 数据类型
- 范围数据类型
- 数组
- 复合数据类型
- 对象标识符类型
- 伪数据类型
- pg-Isn 数据类型
数值数据类型数字数据类型用于在表中指定数字数据。它包含以下内容: - 四字节和八字节浮点数
- 两字节、四字节和八字节整数
- 可选精度的十进制数.
下表包含 PostgreSQL 支持的所有数字数据类型: name | 描述 | 存储大小 | range |
---|
smallint | 存储整数,范围小。 | 2 字节 | -32768 至 +32767 | 整数 | 存储整数。当您想存储典型整数时使用。 | 4 字节 | -2147483648 到 +2147483647 | bigint | 存储整数,范围大。 | 8 字节 | -9223372036854775808 到 9223372036854775807 | decimal | 用户指定精度,精确 | variable (变量) | 小数点前最多 131072 位;小数点后最多 16383 位。 | numeric | 用户指定精度,精确 | variable (变量) | 小数点前最多 131072 位;小数点后最多 16383 位。
| real | 可变精度,不精确
| 4 字节 | 6 位十进制精度。 | double precision | 可变精度,不精确 | 8 字节 | 15 位十进制精度 | serial | 自动递增整数 | 4 字节 | 1 到 2147483647 | bigserial | 大型自动递增整数 | 8 字节 | 1 到 9223372036854775807 |
字符数据类型在 PostgreSQL 中,我们有各种通用字符数据类型,这些数据类型用于表示字符类型的值。 下表包含 PostgreSQL 支持的所有字符数据类型: 数据类型 | 说明 |
---|
char(size) | 此处 size 是要存储的字符数。定长字符串。右侧用空格填充以达到 size 字符。 | character(size) | 此处 size 是要存储的字符数。定长字符串。右侧用空格填充以达到 size 字符。 | varchar(size) | 此处 size 是要存储的字符数。变长字符串。 | character varying(size) | 此处 size 是要存储的字符数。变长字符串。 | text | 变长字符串。 |
日期/时间数据类型PostgreSQL 支持完整的 SQL 日期和时间数据类型集。日期/时间数据类型用于表示使用日期和时间值的列。日期是根据公历计算的。 下表包含 PostgreSQL 支持的所有日期/时间数据类型: 名称 | 描述 | 存储大小 | 最小值 | 最大值 | 决议 |
---|
timestamp [ (p) ] [ without time zone ] | 日期和时间(无时区) | 8 字节 | 公元前 4713 年 | 公元 294276 年 | 1 微秒 / 14 位数字 | timestamp [ (p) ] with time zone | 日期和时间,带时区 | 8 字节 | 公元前 4713 年 | 公元 294276 年 | 1 微秒 / 14 位数字 | date | date (无时间) | 4 字节 | 公元前 4713 年 | 公元 5874897 年 | 1 天 | time [ (p) ] [ without time zone ] | 时间(无日期) | 8 字节 | 00:00:00 | 24:00:00 | 1 微秒 / 14 位数字 | time [ (p) ] with time zone | 仅时间,带时区 | 12 字节 | 00:00:00+1459 | 24:00:00-1459 | 1 微秒 / 14 位数字 | interval [ fields ] [ (p) ] | 时间间隔 | 12 字节 | -178000000 年 | 178000000 年 | 1 微秒 / 14 位数字 |
货币类型名称 | 描述 | 存储大小 | 范围 |
---|
money | 货币金额 | 8 字节 | -92233720368547758.08 到 +92233720368547758.07 |
二进制数据类型bytea 数据类型允许存储二进制字符串,如下表所示: 名称 | 存储大小 | 描述 |
---|
bytea | 1 或 4 字节加上实际的二进制字符串 | 变长二进制字符串 |
布尔类型PostgreSQL 包含标准 SQL 类型 boolean;布尔类型有多种状态,如 true、false,以及第三种状态 unknown,由 SQL null 值表示。 名称 | 描述 | 存储大小 |
---|
boolean | 它指定真或假的状态。 | 1 字节 |
布尔数据类型输入函数接收这些字符串表示形式用于 true 和 false 状态。  枚举类型在 PostgreSQL 中,枚举数据类型包含一组静态、有序的值。 它类似于与各种编程语言兼容的 enum 类型。枚举数据类型在表中以外键表示,以确保数据完整性。 例如 几何数据类型几何数据类型表示二维空间对象。最基本的类型是点,它构成了所有其他类型的基础。 名称 | 存储大小 | 表示 | 描述 |
---|
point | 16 字节 | 平面上的点 | (x,y) | 序列 | 32 字节 | 无限线(未完全实现) | ((x1,y1),(x2,y2)) | lseg | 32 字节 | 有限线段 | ((x1,y1),(x2,y2)) | box | 32 字节 | 矩形框 | ((x1,y1),(x2,y2)) | path | 16+16n 字节 | 闭合路径(类似于多边形) | ((x1,y1),...) | path | 16+16n 字节 | 开放路径 | [(x1,y1),...] | polygon | 40+16n | 多边形(类似于闭合路径) | ((x1,y1),...) | circle | 24 字节 | circle | <(x,y),r>(中心点和半径) |
文本搜索数据类型在 PostgreSQL 中,全文搜索数据类型用于在自然语言文档集合中进行搜索。我们有两种与全文搜索兼容的数据类型。 数据类型 | 描述 |
---|
tsvector | 它用于以增强文本搜索的形式显示文档。 | tsquery | 它用于表示文本查询。 |
UUID 数据类型UUID 代表通用唯一标识符,是由算法创建的 128 位数量。它是主键的最佳数据类型。UUID 以小写十六进制数字组的形式书写,通过连字符分隔的多个集合。 例如: 注意:PostgreSQL 也接受其他形式的 UUID 输入,例如无连字符、全大写、大括号等。网络地址数据类型PostgreSQL 提供数据类型来存储 Mac 地址、IPv4 和 IPv6,如下表所示。除了纯文本类型,它还增强了这些类型以包含网络地址,因为它们提供了输入错误检查和特定功能和操作符。 下表包含 PostgreSQL 支持的所有网络地址数据类型: 数据类型 | 描述 | 存储大小 |
---|
inet | 它存储 IPv4 和 IPv6 主机和网络。 | 7 或 19 字节 | cidr | 它用于存储 IPv4 和 IPv6 网络。 | 7 或 19 字节 | macaddr | 它存储 MAC 地址。 | 6 字节 |
JSON 数据类型PostgreSQL 提供两种数据类型来存储 JSON(JavaScript 对象表示法)数据。 Json 它是带有 JSON 验证的文本数据类型的扩展。在此,我们可以快速插入数据,但数据检索相对较慢。它按照包含空格的方式保存输入数据。它还需要在数据检索时进行重新处理。 Jsonb 它是 JSON 数据的二进制表示。它也兼容索引,并且还改进了空格以加快检索速度。在此,插入速度慢,但数据检索速度更快,并且在数据检索时不需要重新处理。 位串类型位串数据类型包含两类字符串,即 1 和 0。借助这些字符串可以存储位掩码。在此,我们有两种 SQL 位,例如: 此处,n 是一个正整数。 XML 类型在 PostgreSQL 中,XML 数据类型用于存储 XML 数据。XML 数据类型的功能是检查输入 XML 是否格式良好,并且还支持函数对其执行类型安全操作。 例如 范围类型这些数据类型用于显示某些元素类型的范围值,称为范围的子类型。它还表示单个范围值中的多个元素值。在此,我们还可以创建自己的范围类型。 在 PostgreSQL 中,我们有以下内置范围类型: 内置范围类型 | 描述 |
---|
tsrange | 无时区时间戳范围 | tstzrange | 带时区时间戳范围 | daterange | 日期范围 | int4range | 整数范围 | int8range | 大整数范围 | numrange | 数字范围 |
数组类型在此,PostgreSQL 将表列作为可变长度和多维数组提供。我们可以创建任何用户定义的基类型、内置类型、复合类型和枚举类型数组。 在此,我们可以对数组执行各种操作,例如声明、插入、访问、修改和搜索。 复合类型在 PostgreSQL 中,复合数据类型用于表示行或记录的结构,作为文件名字和数据类型的列表。 伪数据类型在 PostgreSQL 中,数据类型是伪类型,用于包含许多特殊用途的条目。它用于声明结果类型或函数的参数,但它不兼容用作列数据类型。 下表包含 PostgreSQL 支持的一些常用伪数据类型: 伪数据类型 | 描述 |
---|
any | 它表示函数接受任何输入数据类型。 | anyelement | 它接受任何数据类型。 | anyarray | 它表示函数接受任何数组数据类型 | anyenum | 它接受任何枚举数据类型 | anyrange | 它接受任何范围数据类型 | cstring | 它用于指定函数接受或返回以 null 结尾的 C 字符串。 | language_handler | 声明过程语言调用处理程序返回 language_handler。 | fdw_handler | 声明 fdw(外部数据封装器)处理程序返回 fdw_handler。 | record | 它用于指定一个函数,该函数接受或返回未指定的行类型。 | trigger | 它被声明为返回 trigger。 | pg_ddl_command | 它用于表示可用于事件触发器的 DDL 命令。 | void | 它用于指定函数不返回值。 |
对象标识符 (OIDs) 类型这些数据类型用作几个系统表的主键。oid 类型表示对象标识符,当前实现为无符号四字节整数。在大型数据库甚至大型单个表中,它不足以提供全数据库的唯一性。 对象标识符用于引用系统表。除了比较,oid 类型本身很少有操作可以转换为整数,并且可以使用标准整数运算符进行操作。 下表包含 PostgreSQL 支持的所有对象标识符数据类型: 名称 | 描述 | 引用 | 值示例 |
---|
oid | 数字对象标识符 | Any | 564182 | regproc | 函数名 | pg_proc | 求和 | regprocedure | 带参数类型的函数 | pg_proc | sum(int4) | regoper | 操作符名 | pg_operator | + | regoperator | 带参数类型的操作符 | pg_operator | *(integer,integer) 或 -(NONE,integer) | regclass | 关系名 | pg_class | pg_type | regtype | 数据类型名称 | pg_type | Integer | regnamespace | 命名空间名称 | pg_namespace | pg_catalog | regconfig | 文本搜索配置 | pg_ts_config | 英文 | regdictionary | 文本搜索字典 | pg_ts_dict | 简单 |
pg_lsn 类型pg_lsn 数据类型可用于存储日志序列号 (LSN) 数据,它是 XLOG 中某个位置的指针。它用于表示 XLogRecPtr 和 PostgreSQL 的内部系统类型。pg_lsn 类型兼容标准比较运算符,例如 > 和 =. 注意 使用数据类型时,我们可以参考以下几点: - 如果我们有 IEEE 754 数据源,我们可以使用 float 数据类型。
- 对于整数数据类型,我们可以使用 int。
- 永远不要使用 char。
- 如果我们要限制输入,我们可以应用 text 数据类型。
- 当数字很大时,我们只能使用 bigint。
概述- 字符数据类型用于存储文本值。
- 网络地址类型用于优化网络数据的存储。
- 二进制字符串是字节或八位字节的分类。
- PostgreSQL 提供两种不同类型的数字,例如浮点数和整数。
- 范围数据类型用于显示某些元素类型的范围值。
- 布尔数据类型有三个值,例如 True、False 和 Null。
- UUID 数据类型是一个由算法创建的 128 位数量。
- 复合数据类型用于表示行或记录的结构。
- PostgreSQL 中的枚举数据类型很少用于演示修改后的信息,如分支 ID 或国家代码。
- 为了以多种格式定义日期和时间信息,PostgreSQL 提供了日期和时间数据类型。
- 对象标识符数据类型表示对象标识符。
- PostgreSQL 设计的文本搜索数据用于支持全文搜索。
- 几何数据类型用于表示二维空间对象。
- 在 PostgreSQL 中,伪类型用于许多特殊用途的条目。
- pg_lsn 数据类型用于存储日志序列号 (LSN) 数据。
|