【postgresql】 数据类型

发布于:2024-07-03 ⋅ 阅读:(15) ⋅ 点赞:(0)

数字类型

名字 存储尺寸 描述 范围
smallint 2字节 小范围整数 -32768 ~+32767
integer 4字节 整数的典型选择 -2147483648 ~ +2147483647
bigint 8字节 大范围整数 -9223372036854775808 ~ +9223372036854775807
decimal 可变 用户指定精度,精确 最高小数点前131072位,以及小数点后16383位
numeric 可变 用户指定精度,精确 最高小数点前131072位,以及小数点后16383位
real 4字节 可变精度,不精确 6位十进制精度
double precision 8字节 可变精度,不精确 15位十进制精度
smallserial 2字节 自动增加的小整数 1 ~ 32767
serial 4字节 自动增加的整数 1 ~ 2147483647
bigserial 8字节 自动增长的大整数 1 ~ 9223372036854775807

类型smallint、integer和bigint存储各种范围的全部是数字的数,也就是没有小数部分的数字。试图存储超出范围以外的值将导致一个错误。

常用的类型是integer,因为它提供了在范围、存储空间和性能之间的最佳平衡。一般只有在磁盘空间紧张的时候才使用 smallint类型。而只有在integer的范围不够的时候才使用bigint。

SQL只声明了整数类型integer(或int)、smallint和bigint。类型int2、int4和int8都是扩展,也在许多其它SQL数据库系统中使用。

类型numeric可以存储非常多位的数字。我们特别建议将它用于货币金额和其它要求计算准确的数量。numeric值的计算在可能的情况下会得到准确的结果,例如加法、减法、乘法。不过,numeric类型上的算术运算比整数类型或者下一节描述的浮点数类型要慢很多。

在随后的内容里,我们使用了下述术语:一个numeric的precision(精度)是整个数中有效位的总数,也就是小数点两边的位数。numeric的scale(刻度)是小数部分的数字位数,也就是小数点右边的部分。因此数字 23.5141 的精度为6而刻度为4。可以认为整数的刻度为零。

numeric列的最大精度和最大比例都是可以配置的。

货币类型

money 类型存储带有固定小数精度的货币金额。

numeric、int 和 bigint 类型的值可以转换为 money,不建议使用浮点数来处理处理货币类型,因为存在舍入错误的可能性。

名字 存储容量 描述 范围
money 8 字节 货币金额 -92233720368547758.08 到 +92233720368547758.07

布尔类型

名称 存储格式 描述
boolean 1 字节 true/false

日期/时间类型

名字 存储空间 描述 最低值 最高值 分辨率
timestamp  [ without time zone ] 8 字节 日期和时间(无时区) 4713 BC 294276 AD 1 毫秒 / 14 位
timestamp  with time zone 8 字节 日期和时间,有时区 4713 BC 294276 AD 1 毫秒 / 14 位
date 4 字节 只用于日期 4713 BC 5874897 AD 1 天
time  [ without time zone ] 8 字节 只用于一日内时间 0:00:00 24:00:00 1 毫秒 / 14 位
time  with time zone 12 字节 只用于一日内时间,带时区 00:00:00+1459 24:00:00-1459 1 毫秒 / 14 位
interval [ fields ]  12 字节 时间间隔 -178000000 年 178000000 年 1 毫秒 / 14 位

字符串类型

名称 别名 存储大小 范围 描述
character (n) char (n),bpchar(n) n个字节 固定长度字符串,不足会被空格填充
character varying (n) varchar (n) 最多n个字节 可变长度字符串
bpchar n个字符 可变不限制长度字符串,不足字符被空格填充
text 可变长度字符串

自增类型

名称 别名 存储大小 范围 描述
smallserial serial2 2字节 2字节自增整数
serial serial4 4字节 4字节自增整数
bigserial serial8 8字节 8字节自增整数

枚举类型

枚举类型是一个包含静态和值的有序集合的数据类型。

CREATE TYPE mood AS ENUM ('java', 'C++', 'Python');

几何类型

名字 存储空间 说明 表现形式
point 16 字节 平面中的点 (x,y)
line 32 字节 (无穷)直线(未完全实现) ((x1,y1),(x2,y2))
lseg 32 字节 (有限)线段 ((x1,y1),(x2,y2))
box 32 字节 矩形 ((x1,y1),(x2,y2))
path 16+16n 字节 闭合路径(与多边形类似) ((x1,y1),...)
path 16+16n 字节 开放路径 [(x1,y1),...]
polygon 40+16n 字节 多边形(与闭合路径相似) ((x1,y1),...)
circle 24 字节 <(x,y),r> (圆心和半径)

网络地址类型

名字 存储空间 描述
cidr 7 或 19 字节 IPv4 或 IPv6 网络
inet 7 或 19 字节 IPv4 或 IPv6 主机和网络
macaddr 6 字节 MAC 地址

 二进制类型

名称 别名 存储大小 范围 描述
bytea 二进制数据

XML 类型

xml 数据类型可以用于存储XML数据。 将 XML 数据存到 text 类型中的优势在于它能够为结构良好性来检查输入值, 并且还支持函数对其进行类型安全性检查。 要使用这个数据类型,编译时必须使用 configure --with-libxml。

JSON 类型

json 数据类型可以用来存储 JSON(JavaScript Object Notation)数据, 这样的数据也可以存储为 text,但是 json 数据类型更有利于检查每个存储的数值是可用的 JSON 值。

数组类型

PostgreSQL 允许将字段定义成变长的多维数组。

数组类型可以是任何基本类型或用户定义类型,枚举类型或复合类型。





网站公告

今日签到

点亮在社区的每一天
去签到