第六章 数据类型
6.1概述
PostgreSQL 提供了丰富的数据类型。用户可以使用 CREATE TYPE 命令在数据库中创建新的数据类型。PostgreSQL 的数据类型被分为四种,分别是基本数据类型、复合数据类型、域和伪类型。
基本数据类型是数据库内置的数据类型,包括integer、char、varchar等数据类型。表6-1列出了PostgreSQL提供的所有基本数据类型。复合数据类型是用户自己定义的,使用CREATE TYPE命令就能创建一个复合数据类型。域是一种特殊的基本数据类型,它由基本数据类型加上一个约束条件构成,使用CREATE DOMAIN命令就能创建一个域,关于域的详细信息,参考《SQL命令手册》对CREATE DOMAIN命令的解释。伪类型是具有特殊作用的数据类型,这些数据类型不能作为表的列的数据类型,只能作为函数的参数或返回值的数据类型。
下面的小节将会详细介绍基本数据类型、复合数据类型和伪类型。
名字 |
描述 |
bigint |
有符号 8 字节整数 |
bigserial |
自增八字节整数 |
bit [ (n) ] |
定长位串 |
bit varying [ (n) ] |
变长位串 |
boolean |
逻辑布尔量 (真/假) |
box |
平面中的长方形 |
bytea |
二进制数据("字节数组") |
character varying [ (n) ] |
变长字符串 |
character [ (n) ] |
定长字符串 |
cidr |
IPv4 或者 IPv6 网络地址 |
circle |
平面中的圆 |
date |
日历日期(年,月,日) |
double precision |
双精度浮点数字 |
inet |
IPv4 或者 IPv6 网络地址 |
integer |
四字节长有符号整数 |
interval [ (p) ] |
时间间隔 |
line |
平面中的无限长直线 |
lseg |
平面中的线段 |
macaddr |
MAC 地址 |
numeric [ (p, s) ] |
可选精度的准确数字 |
path |
平面中的几何路径 |
point |
平面中的点 |
polygon |
平面中的封闭几何路径 |
real |
单精度浮点数 |
smallint |
有符号两字节整数 |
serial |
自增四字节整数 |
text |
变长字符串 |
time [ (p) ] [ without time zone ] |
一天里的时间 |
time [ (p) ] with time zone |
一天里的时间,包括时区 |
timestamp [ (p) ] [ without time zone ] |
日期和时间 |
timestamp [ (p) ] with time zone |
日期和时间 |
tsquery |
全文检索查询 |
tsvector |
全文检索文档 |
txid_snapshot |
用户级别事务ID快照 |
uuid |
通用唯一标识符 |
xml |
XML数据 |
兼容性: 下列类型是在SQL标准中定义的: bit,bit varying,boolean, char,character,character varying,varchar,date, double precision,integer, interval,numeric,decimal, real,smallint,time (包括有时区和无时区的), timestamp (包括有时区和无时区的)。
PostgreSQL的词法分析器在解析用户发出的SQL命令时,首先将其中的单词分成五类:整数、非整数数字、字符串、标识符和关键字。大部分的非数值常量首先被认为是字符串。
SQL语言提供了明确地指定字符串的类型的机制。例如:
SELECT 'Origin':: text AS "label", '(0,0)':: point AS "value";
label | value
--------+-------
Origin | (0,0)
(1 row)
在上面的例子中,用户指定'Origin' 的类型是text,'(0,0)'的类型是 point。如果用户没有明确地指定和'Origin'和'(0,0)'的数据类型,系统先把它们的类型设为unknown,以后再确定它们的具体数据类型。
6.2 数值类型
数值类型包括2、4或8字节的整数,4或8字节的浮点数和可以定义精度的十进制数。 表6-2 列出了所有数值类型。
名字 |
存储空间 |
描述 |
取值区间 |
|
smallint |
2 字节 |
小整数 |
-32768 到 +32767 |
|
integer |
4 字节 |
常用的整数 |