PostgreSQL | ||
---|---|---|
上一页 | 下一页 |
描述 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 | 当前事务的日期和时间 |
绝大多数与基本类型(如:整数和浮点数)对应的输入输出函数都会做错误检查.出于改善执行性能的考虑,一些操作符和函数(如加法和乘法)并不做运行时的错误检查.因而在一些系统上的对某些数据类型的数字操作会导致轻微的数值溢出或下溢。
要注意的是一些输入输出函数是不可逆的.也就是说,一个输出函数的输出结果与输入的数据相比可能会丢失精度。
注意:浮点数可以保持该类型的最高固有精度(一般来说,双精度是15位,4字节浮点数是6位).其他依赖浮点的数据类型(如,几何类型)也有相似精度.
表 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 类型因为是要靠编译器来支持的,因而可能无法在所有平台上得到支持。
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 命令,序列号不会被删掉而一直在数据库里面。
上一页 | 首页 | 下一页 |
表达式 | 开头 | 货币类型 |