↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本。 PostgreSQL 7.1 已结束支持。 请参阅 当前版本手册.

第 3 章 数据类型

Postgres 有一套丰富的本机数据类型可供用户使用。用户可以用 CREATE TYPE 命令向 Postgres 添加新类型。

表 3.1列出了可供用户使用的所有通用数据类型。“别名”列中列出的大多数替代名称,是 Postgres 出于历史原因在内部使用的名称。此外还有一些内部使用或已废弃的类型可用,但这里没有记载。许多内建类型都有显而易见的外部格式。但也有一些类型要么为 Postgres 所独有(例如开放和闭合路径),要么有多种可选格式(例如日期和时间类型)。

表 3.1. 数据类型

类型名别名描述
bigintint8有符号的8字节整数
bit 定长位串
bit varying(n)varbit(n)变长位串
booleanbool逻辑布尔值(真/假)
box 二维平面上的矩形框
character(n)char(n)定长字符串
character varying(n)varchar(n)变长字符串
cidr IP 网络地址
circle 二维平面上的圆
date 日历日期(年、月、日)
double precisionfloat8双精度浮点数
inet IP 主机地址
integerint, int4有符号4字节整数
interval 通用时间段
line 二维平面上的无限直线
lseg 二维平面上的线段
macaddr MAC 地址
money 美式货币
numeric(p, s)decimal(p, s)精度可选择的精确数值
oid 对象标识符
path 二维平面上的开放和闭合几何路径
point 二维平面上的几何点
polygon 二维平面上的封闭几何路径
realfloat4单精度浮点数
smallintint2有符号2字节整数
serial 自动递增的4字节整数
text 变长字符串
time [ without time zone ] 一天中的时间
time with time zone 一天中的时间,包括时区
timestamp [ with time zone ] 日期和时间


兼容性

SQL 指定了下列类型(或其拼写):bit、bit varying、boolean、char、character、character varying、varchar、date、double precision、integer、interval、numeric、decimal、real、smallint、time、timestamp(带或不带时区)。

大多数对应于基本类型(如整数和浮点数)的输入和输出函数会做一些错误检查。为了提高执行速度,某些运算符和函数(例如加法和乘法)不做运行时错误检查。例如在某些系统上,某些数据类型的数值运算符可能静默下溢或上溢。

有些输入和输出函数是不可逆的。也就是说,输出函数的结果与原始输入相比可能损失精度。

3.1. 数字类型 #

数值类型包括二字节、四字节和八字节整数,四字节和八字节浮点数,以及固定精度的小数。

表 3.2. 数字类型

类型名存储尺寸描述范围
smallint2字节定点数-32768 到 +32767
integer4字节定点数的常用选择-2147483648 到 +2147483647
bigint8字节极大范围定点数约 18 位十进制数字
decimal可变用户指定精度无限制
numeric可变用户指定精度无限制
real4字节可变精度6 位十进制数字
double precision8字节可变精度15 位十进制数字
serial4字节标识符或交叉引用0 到 +2147483647


数值类型常量的语法在第 1.1.2 节中描述。数值类型有一整套相应的算术运算符和函数。更多信息请参阅第 4 章。

bigint 类型并非在所有平台上都可用,因为它依赖编译器对八字节整数的支持。

3.1.1. serial 类型 #

serial 类型是由 Postgres 用其他现有构件构造的一种特殊类型。它通常用于为表条目创建唯一标识符。在当前的实现中,指定

CREATE TABLE tablename (colname SERIAL);
     

等效于指定:

CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename
    (colname integer DEFAULT nextval('tablename_colname_seq');
CREATE UNIQUE INDEX tablename_colname_key on tablename (colname);
     

小心

为 serial 类型创建的隐式序列在表被删除时不会被自动删除。

支撑 serial 的隐式序列不会在包含 serial 类型的表被删除时自动删除。因此,按顺序执行下面的命令很可能会失败:

CREATE TABLE tablename (colname SERIAL);
DROP TABLE tablename;
CREATE TABLE tablename (colname SERIAL);
     

该序列会一直留在数据库中,直到用 DROP SEQUENCE 显式删除。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.