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

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

已结束支持的版本: 6.3
历史版本。 PostgreSQL 6.3 已结束支持。 请参阅 当前版本手册.

第 8 章 数据类型

摘要

描述 Postgres 中可用的内建数据类型。

Postgres 有一套丰富的本机数据类型可供用户使用。用户可以用在别处描述的 define type 命令向 Postgres 添加新类型。

在数据类型的语境下,下面几节将讨论 SQL 标准兼容性、移植问题和使用方法。某些 Postgres 类型直接对应于 SQL92 兼容类型。另一些情况下,由 SQL92 语法定义的数据类型被直接映射为 Postgres 本机类型。许多内建类型都有显而易见的外部格式。但也有一些类型要么为 Postgres 所独有(例如开放和闭合路径),要么有多种可选格式(例如日期和时间类型)。

表 8.1. Postgres 数据类型

Postgres 类型SQL92 或 SQL3 类型描述
boolboolean逻辑布尔值(真/假)
box 二维平面上的矩形框
char(n)character(n)定长字符串
circle 二维平面上的圆
datedate不含时间的日历日期
float4/8float(p)精度为 p 的浮点数
float8real, double precision双精度浮点数
int2smallint有符号二字节整数
int4int, integer有符号 4 字节整数
int4decimal(p,s)p <= 9、s = 0 的精确数值
int4numeric(p,s)p == 9、s = 0 的精确数值
line 二维平面上的无限直线
lseg 二维平面上的线段
moneydecimal(9,2)美式货币
path 二维平面上的开放和闭合几何路径
point 二维平面上的几何点
polygon 二维平面上的封闭几何路径
timetime一天中的时间
timespaninterval通用时间段
timestamptimestamp with time zone日期/时间
varchar(n)character varying(n)变长字符串


表 8.2. Postgres 函数常量

Postgres 函数SQL92 常量描述
getpgusername()current_user当前会话中的用户名
date('now')current_date当前事务的日期
time('now')current_time当前事务的时间
timestamp('now')current_timestamp当前事务的日期和时间


Postgres 拥有位于 ORDBMS 发展前沿的特性。除了符合 SQL3 外,还支持 SQL92 的很大一部分。尽管我们力求 SQL92 兼容,但该标准中有一些情形考虑欠周,不应延续到后续标准中。Postgres 不会花大力气去符合这些情形。不过这些情形往往很少使用且冷僻,典型用户不太可能遇到。

虽然大多数对应于基本类型(如整数和浮点数)的输入和输出函数会做一些错误检查,但有些检查得并不特别严格。更重要的是,很少有运算符和函数(例如加法和乘法)做任何错误检查。因此,许多数值运算符可能(例如)静默地下溢或上溢。

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

8.1. 数字类型

数值类型包括二字节和四字节整数以及四字节和八字节浮点数。

表 8.3. Postgres 数值类型

数值类型存储尺寸描述范围
int22字节固定精度-32768 到 +32767
int44 字节固定精度的常用选择-2147483648 到 +2147483647
float44 字节可变精度7 位十进制小数
float88字节可变精度14 位十进制小数


精确数值 decimal 和 numeric 拥有完整实现的语法,但目前(Postgres v6.3)只支持较小的精度和/或取值范围。

报告文档问题

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