PostgreSQL 教程:数据类型详解
PostgreSQL 教程:数据类型详解
在数据库开发中,正确选择和使用数据类型是确保数据完整性和提高查询效率的关键。PostgreSQL作为功能强大的开源数据库系统,提供了丰富的数据类型以满足各种应用场景的需求。本文将详细介绍PostgreSQL中的主要数据类型,包括布尔型、字符型、数字型、时间型、数组、JSON、UUID以及一些特殊类型。
PostgreSQL 数据类型概述
PostgreSQL支持以下数据类型:
- 布尔型
- 字符类型,例如
char
、varchar
和text
。 - 数字类型,例如整数和浮点数。
- 时间类型,例如日期、时间、时间戳和时间间隔。
- 用于存储通用唯一标识符的UUID。
- 数组,用于存储数组字符串、数字等。
- JSON和JSONB存储 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)
是用空格填充的固定长度字符。如果插入的字符串短于列的长度,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
数据类型存储纯 JSON 数据,每次处理都需要重新解析。JSONB
数据类型以二进制格式存储JSON
数据,处理速度更快,但插入速度较慢。此外,JSONB
支持索引,这也是一个优势。
UUID
UUID数据类型允许您存储RFC 4122定义的通用唯一标识符。这些UUID值保证了比SERIAL
更好的唯一性,并且可用于隐藏向公众公开的敏感数据,例如URL中的id
值。
特殊数据类型
除了原始数据类型之外,PostgreSQL还提供了几种与几何和网络相关的特殊数据类型:
box
– 一个长方形的方框。line
– 一组点。point
– 一对几何数字。lseg
– 一条线段。polygon
– 闭合几何。inet
– IPv4 地址。macaddr
– MAC 地址。
在本教程中,我们向您介绍了PostgreSQL数据类型,以便您可以在下一个教程中使用它们来创建表。