PostgreSQL 教程: 数据类型

九月 27, 2023

摘要:在本教程中,您将了解 PostgreSQL 数据类型,包括布尔型、字符型、数字型、时间型、数组、json、uuid 和特殊类型。

PostgreSQL Data Types

目录

PostgreSQL 数据类型概述

PostgreSQL 支持以下数据类型:

  • 布尔型
  • 字符类型,例如charvarchartext
  • 数字类型,例如整数和浮点数。
  • 时间类型,例如日期时间时间戳时间间隔
  • 用于存储通用唯一标识符的 UUID
  • 数组,用于存储数组字符串、数字等。
  • JSON 存储 JSON 数据
  • hstore 存储键值对
  • 特殊类型,例如网络地址和几何数据。

布尔型

布尔数据类型可以包含三个可能值之一:true、false 或 null。您可以使用booleanbool关键字来声明具有布尔数据类型的列。

当您将数据插入布尔列时,PostgreSQL 将其转换为布尔值

  • 1yesyttrue值转换为true
  • 0nofalsef值转换为false

当您从布尔列中查询数据时,PostgreSQL 会将值转换回来,例如 t转换为truef转换为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 个字节。
  • realfloat8是一个 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 数据类型:JSONJSONB用于存储 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 数据类型,以便您可以在下一个教程中使用它们来创建表。