↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 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 已于 2006 年 4 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

第 3 章 数据类型

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

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

表 3.1. 数据类型

类型名 别名 描述
bigint int8 有符号的8字节整数
bit   定长位串
bit varying(n) varbit(n) 变长位串
boolean bool 逻辑布尔值(真/假)
box   二维平面上的矩形框
character(n) char(n) 定长字符串
character varying(n) varchar(n) 变长字符串
cidr   IP 网络地址
circle   二维平面上的圆
date   日历日期(年、月、日)
double precision float8 双精度浮点数
inet   IP 主机地址
integer int, int4 有符号4字节整数
interval   通用时间段
line   二维平面上的无限直线
lseg   二维平面上的线段
macaddr   MAC 地址
money   美式货币
numeric(p, s) decimal(p, s) 精度可选择的精确数值
oid   对象标识符
path   二维平面上的开放和闭合几何路径
point   二维平面上的几何点
polygon   二维平面上的封闭几何路径
real float4 单精度浮点数
smallint int2 有符号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. 数字类型

类型名 存储尺寸 描述 范围
smallint 2字节 定点数 -32768 到 +32767
integer 4字节 定点数的常用选择 -2147483648 到 +2147483647
bigint 8字节 极大范围定点数 约 18 位十进制数字
decimal 可变 用户指定精度 无限制
numeric 可变 用户指定精度 无限制
real 4字节 可变精度 6 位十进制数字
double precision 8字节 可变精度 15 位十进制数字
serial 4字节 标识符或交叉引用 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 显式删除。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。