PostgreSQL
上一页   下一页

第三章. 数据类型

内容
数值类型
货币类型
字符类型
日期/时间类型
布尔类型
几何类型
IP 版本 4 网络和主机类型
描述 Postgres 内建的可用数据类型.
Postgres 有着丰富的数据类型可用.用户可以使用 DEFINE TYPE 命令为 Postgres增加新的数据类型.

在数据类型这部分,随后的各节将讨论 SQL 标准的兼容性,移植问题和使用问题.一些 Postgres 类型直接与 SQL92-兼容类型相对应.其它一些 SQL92 语法定义的数据类型直接映射为Postgres 内部的数据类型. 许多内建的数据类型有明确的外部格式.但是,有一些数据类型或者是Postgres特有的,如开放和闭合路径,或者是有几种可能格式的类型,如日期和时间类型.

  表 3-1. Postgres数据类型
 

Postgres 类型 SQL92 或 SQL3 类型 描述
bool boolean 逻辑布尔量 (真/假)
box   二维平面中的方形盒
char(n) character(n) 定长字符串
cidr   IP v4网络或主机地址
circle   二维平面中的圆
date date 日历日期(不带时间)
decimal decimal(p,s) p <= 9,s = 0 的准确数字
float4 float(p), p < 7 精度为p的浮点数
float8 float(p), 7 <= p < 16 双精度浮点数
inet   IP v4网络或主机地址
int2 smallint 两字节长带符号整数
int4 int, integer 四字节长带符号整数
int8   八字节长带符号整数
interval interval 通用的时间间隔
line   二维平面中的直线(无限长)
lseg   二维平面中的线段
money decimal(9,2) 美国风格的货币类型
numeric numeric(p,s) p == 9,s = 0的准确数字
path   二平面的开放的或封闭的几何路径
point   二维平面中的点
polygon   二维平面中的封闭几何路径
serial   用于索引和/或交叉索引的独一无二的标识符
time time 一天里的时间
timetz time with time zone 一天里的时间,包括时区
timestamp timestamp with time zone 日期/时间
varchar(n) character varying(n) 变长的字符串

注意: cidr 和 inet 用于处理任何IP类型数据,但目前只能处理ipv4的数据.在以后的版本里我们将将所有对ipv4的支持增加到对ipv6的支持中.
表 3-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不会为这些特性花费太多的时间;因为这些方面主要发生在很少使用或语意含混的场合,典型的用户很少能碰到它们。

绝大多数与基本类型(如:整数和浮点数)对应的输入输出函数都会做错误检查.出于改善执行性能的考虑,一些操作符和函数(如加法和乘法)并不做运行时的错误检查.因而在一些系统上的对某些数据类型的数字操作会导致轻微的数值溢出或下溢。

要注意的是一些输入输出函数是不可逆的.也就是说,一个输出函数的输出结果与输入的数据相比可能会丢失精度。

注意:浮点数可以保持该类型的最高固有精度(一般来说,双精度是15位,4字节浮点数是6位).其他依赖浮点的数据类型(如,几何类型)也有相似精度.

数值类型

数值类型由2或4字节的整数以及4或8字节的浮点数和固定精度小数组成。

表 3-3. Postgres 数值类型
 

数值类型 存储空间 描述 范围
decimal 变长 用户声明精度 ~8000 位(数字)
float4 4 bytes 变精度 6 位数字
float8 8 bytes 变精度 15 位数字
int2 2 bytes 固定精度 -32768 到 +32767
int4 4 bytes 常用的固定精度数 -2147483648 到 +2147483647
int8 8 bytes 极大范围的固定精度数 +/- > 18 位数字
numeric variable 用户声明精度 无限制
serial 4 bytes 标识或交叉索引 0 到 +2147483647

数值类型对应有一套完整的数学操作符和函数.相关信息请参考 数字操作符数学函数

int8 类型因为是要靠编译器来支持的,因而可能无法在所有平台上得到支持。

Serial(序列)类型

serial 类型是 Postgres 用其他现有的类型构造出来的一种特殊的类型.典型的应用是创建表的唯一标识,在当前的实现中,下面一句话:
CREATE TABLE tablename (colname SERIAL);
等价于下面几句话:
CREATE SEQUENCE tablename_colname_seq;
CREATE TABLE tablename
    (colname INT4 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 命令,序列号不会被删掉而一直在数据库里面。

上一页 首页 下一页
表达式 开头 货币类型