pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
目录
摘要
描述 Postgres 中可用的内建数据类型。
Postgres 有一套丰富的本机数据类型可供用户使用。用户可以用在别处描述的 define type 命令向 Postgres 添加新类型。
在数据类型的语境下,下面几节将讨论 SQL 标准兼容性、移植问题和使用方法。 某些 Postgres 类型直接对应于 SQL92 兼容类型。另一些情况下,由 SQL92 语法定义的数据类型被直接映射为 Postgres 本机类型。 许多内建类型都有显而易见的外部格式。但也有一些类型要么为 Postgres 所独有(例如开放和闭合路径),要么有多种可选格式(例如日期和时间类型)。
表 8.1. Postgres 数据类型
| Postgres 类型 | SQL92 或 SQL3 类型 | 描述 |
|---|---|---|
| bool | boolean | 逻辑布尔值(真/假) |
| box | 二维平面上的矩形框 | |
| char(n) | character(n) | 定长字符串 |
| circle | 二维平面上的圆 | |
| date | date | 不含时间的日历日期 |
| float4/8 | float(p) | 精度为 p 的浮点数 |
| float8 | real, double precision | 双精度浮点数 |
| int2 | smallint | 有符号二字节整数 |
| int4 | int, integer | 有符号 4 字节整数 |
| int4 | decimal(p,s) | p <= 9、s = 0 的精确数值 |
| int4 | numeric(p,s) | p == 9、s = 0 的精确数值 |
| line | 二维平面上的无限直线 | |
| lseg | 二维平面上的线段 | |
| money | decimal(9,2) | 美式货币 |
| path | 二维平面上的开放和闭合几何路径 | |
| point | 二维平面上的几何点 | |
| polygon | 二维平面上的封闭几何路径 | |
| time | time | 一天中的时间 |
| timespan | interval | 通用时间段 |
| timestamp | timestamp 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.3. Postgres 数值类型
| 数值类型 | 存储尺寸 | 描述 | 范围 |
|---|---|---|---|
| int2 | 2字节 | 固定精度 | -32768 到 +32767 |
| int4 | 4 字节 | 固定精度的常用选择 | -2147483648 到 +2147483647 |
| float4 | 4 字节 | 可变精度 | 7 位十进制小数 |
| float8 | 8字节 | 可变精度 | 14 位十进制小数 |
精确数值 decimal 和 numeric 拥有完整实现的语法,但目前(Postgres v6.3)只支持较小的精度和/或取值范围。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。