PostgreSQL的数据类型

Eave 2025.11.13

1、数值类型

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

名字 存储空间 描述 范围
smallint 2字节 小范围整数 -32768到+32768
integer 4字节 常用的整数 -2147483648到+2147483647
bigint 8字节 大范围的整数 -9223372036854775808到9223372036854775807
decimal 变长 用户声明精度,精确 无限制
numeric 变长 用户声明精度,精确 无限制
real 4字节 变精度,不精确 6位十进制数字精度
double precision 8字节 变精度,不精确 15位十进制数字精度
serial 4字节 自增整数 1到2147483647
bigserial 8字节 大范围的自增整数 1到9223372036854775807

2、货币类型

money类型存储带有固定小数精度的货币金额,可查阅Table 8-3。 小数精度由lc_monetary的设置来决定。 可以以任意格式输入,包括整型,浮点型,或者典型的货币格式,如'$1,000.00'。 根据区域字符集,输出一般是最后一种形式。 通过将整数值转换成text类型,再转换成money类型的方式, 将不带引号的数值转换成money类型。

SELECT 1234::text::money;

balance

在缺少区域语言支持的条件下,反向将money值转换成数值类型是很麻烦的。 如果知道货币符号和千位分隔符,你可以使用regexp_replace():

SELECT regexp_replace('52093.89'::money::text, '[$,]', '', 'g')::numeric;

由于输出的数据类型对语言环境要求很细,因此,lc_monetary设置的不同可能会造成 无法将money数据输入到数据库中。 为了避免这种问题的发生,在向一个新数据库进行转储之前,确保lc_monetary与原数据库相同,或具有等价值。

名字 存储空间 描述 范围
smallint 2字节 小范围整数 -32768到+32768
integer 4字节 常用的整数 -2147483648到+2147483647

3、字符类型

名字 描述
character varying(n), varchar(n) 变长,有长度限制
character(n), char(n) 定长,不足补空白
text 变长,无长度限制

4、日期/时间类型

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

5、布尔类型

PostgreSQL支持SQL标 准的boolean数据类型。 boolean只能有"true"(真)或"false"(假)两个状态之一, 第三种"unknown"(未知)状态,用NULL表示。

名称 存储格式 描述
boolean 1字节 真/假

值的有效文本值是:TRUE,t,true,y,yes,on,1

值的有效文本值是:FALSE,f,false,n,no,off,0

前导或尾随空白将被忽略,大小写无关紧要。

6、枚举类型

枚举类型是一个包含静态和值的有序集合的数据类型。 等于某些编程语言中的enum类型。 一个枚举类型可以是一周中的天,或者一块数据的状态值的集合。

枚举类型的声明

CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');

枚举类型的使用

CREATE TABLE person (
    name varchar(32),
    current_mood mood
);

7、几何类型

几何数据类型表示二维的平面物体。

名字 存储空间 说明 表现形式
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> (圆心和半径)

8、网络地址类型

PostgreSQL提供用于存储 IPv4、IPv6、MAC地址的数据类型。 用这些数据类型存储网络地址比用纯文本类型好, 因为这些类型提供输入错误检查和好些种特殊的操作和功能

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