九月 27, 2023
摘要:在本教程中,您将了解 PostgreSQL 数据类型,包括布尔型、字符型、数字型、时间型、数组、json、uuid 和特殊类型。
目录
PostgreSQL 数据类型概述
PostgreSQL 支持以下数据类型:
- 布尔型
- 字符类型,例如
char
、varchar
和text
。 - 数字类型,例如整数和浮点数。
- 时间类型,例如日期、时间、时间戳和时间间隔。
- 用于存储通用唯一标识符的 UUID。
- 数组,用于存储数组字符串、数字等。
- JSON 存储 JSON 数据
- hstore 存储键值对
- 特殊类型,例如网络地址和几何数据。
布尔型
布尔数据类型可以包含三个可能值之一:true、false 或 null。您可以使用boolean
或bool
关键字来声明具有布尔数据类型的列。
当您将数据插入布尔列时,PostgreSQL 将其转换为布尔值
1
、yes
、y
、t
、true
值转换为true
。0
、no
、false
、f
值转换为false
。
当您从布尔列中查询数据时,PostgreSQL 会将值转换回来,例如 t
转换为true
、f
转换为false
、和space
转换为null
。
字符型
PostgreSQL 提供了三种字符数据类型:CHAR(n)
、VARCHAR(n)
和TEXT
CHAR(n)
是用空格填充的固定长度字符。如果插入的字符串短于列的长度,PostgreSQL 会填充空格。如果插入的字符串比列的长度长,PostgreSQL 将发出错误。VARCHAR(n)
是变长字符串。使用VARCHAR(n)
,您最多可以存储n
字符。当存储的字符串短于列的长度时,PostgreSQL 不会填充空格。TEXT
是变长字符串。理论上,text 数据可以是无限长度的字符串。
数值型
PostgreSQL 提供两种不同类型的数字:
- 整数
- 浮点数
整数
PostgreSQL 中有三种整数:
- 小整数 (
SMALLINT
) 是 2 字节有符号整数,范围为 -32,768 到 32,767。 - 整数 (
INT
) 是一个 4 字节整数,范围为 -2,147,483,648 到 2,147,483,647。 - 序列数 (serial) 与整数相同,只是 PostgreSQL 会自动生成值并将值填充到
SERIAL
列中。这类似于 MySQL 中的AUTO_INCREMENT
列或 SQLite 中的AUTOINCREMENT
列。
浮点数
浮点数主要有以下三种类型:
float(n)
是一种浮点数,其精度至少为 n,最大为 8 个字节。real
或float8
是一个 4 字节浮点数。numeric
或numeric(p,s)
是 p 位的实数,小数点后有 s 个数字。numeric(p,s)
是精确的数字。
时间类型
时间数据类型允许您存储日期和/或时间数据。PostgreSQL 有五种主要的时间数据类型:
DATE
仅存储日期。TIME
存储一天中的时间值。TIMESTAMP
存储日期和时间值。TIMESTAMPTZ
是一种时区感知的时间戳数据类型。它是带有时区的时间戳 (timestamp with time zone
) 的缩写。INTERVAL
存储时间间隔。
TIMESTAMPTZ
是 PostgreSQL 对 SQL 标准的时间数据类型的扩展。
数组
在 PostgreSQL 中,您可以在数组列中存储字符串数组、整数数组等。该数组在某些情况下会派上用场,例如存储一周中的几天、一年中的几个月。
JSON
PostgreSQL 提供了两种 JSON 数据类型:JSON
和JSONB
用于存储 JSON 数据。
JSON
数据类型存储纯 JSON 数据,每次处理都需要重新解析,而JSONB
数据类型以二进制格式存储JSON
数据,处理速度更快,但插入速度较慢。此外,JSONB
支持索引,这也是一个优势。
UUID
UUID
数据类型允许您存储 RFC 4122 定义的通用唯一标识符。这些UUID
值保证了比SERIAL
更好的唯一性,并且可用于隐藏向公众公开的敏感数据,例如 URL 中的id
值。
特殊数据类型
除了原始数据类型之外,PostgreSQL 还提供了几种与几何和网络相关的特殊数据类型。
box
– 一个长方形的方框。line
– 一组点。point
– 一对几何数字。lseg
– 一条线段。polygon
– 闭合几何。inet
– IPv4 地址。macaddr
– MAC 地址。
在本教程中,我们向您介绍了 PostgreSQL 数据类型,以便您可以在下一个教程中使用它们来创建表。