pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
目录
Postgres 有一套丰富的本机数据类型可供用户使用。用户可以用 CREATE TYPE 命令向 Postgres 添加新类型。
表 3.1 列出了可供用户使用的所有通用数据类型。“别名”列中列出的大多数替代名称,是 Postgres 出于历史原因在内部使用的名称。此外还有一些内部使用或已废弃的类型可用,但这里没有记载。许多内建类型都有显而易见的外部格式。但也有一些类型要么为 Postgres 所独有(例如开放和闭合路径),要么有多种可选格式(例如日期和时间类型)。
表 3.1. 数据类型
| 类型名 | 别名 | 描述 |
|---|---|---|
bigint |
int8 |
有符号的8字节整数 |
bit |
定长位串 | |
bit varying( |
varbit( |
变长位串 |
boolean |
bool |
逻辑布尔值(真/假) |
box |
二维平面上的矩形框 | |
character( |
char( |
定长字符串 |
character varying( |
varchar( |
变长字符串 |
cidr |
IP 网络地址 | |
circle |
二维平面上的圆 | |
date |
日历日期(年、月、日) | |
double precision |
float8 |
双精度浮点数 |
inet |
IP 主机地址 | |
integer |
int, int4 |
有符号4字节整数 |
interval |
通用时间段 | |
line |
二维平面上的无限直线 | |
lseg |
二维平面上的线段 | |
macaddr |
MAC 地址 | |
money |
美式货币 | |
numeric( |
decimal( |
精度可选择的精确数值 |
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.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 类型并非在所有平台上都可用,因为它依赖编译器对八字节整数的支持。
serial 类型是由 Postgres 用其他现有构件构造的一种特殊类型。它通常用于为表条目创建唯一标识符。 在当前的实现中,指定
CREATE TABLEtablename(colnameSERIAL);
等效于指定:
CREATE SEQUENCEtablename_colname_seq; CREATE TABLEtablename(colnameinteger DEFAULT nextval('tablename_colname_seq'); CREATE UNIQUE INDEXtablename_colname_key ontablename(colname);
为 serial 类型创建的隐式序列在表被删除时不会被自动删除。
支撑 serial 的隐式序列不会在包含 serial 类型的表被删除时自动删除。因此,按顺序执行下面的命令很可能会失败:
CREATE TABLEtablename(colnameSERIAL); DROP TABLEtablename; CREATE TABLEtablename(colnameSERIAL);
该序列会一直留在数据库中,直到用 DROP SEQUENCE 显式删除。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。