Skip to content

POSTGRESQL-数据类型

pg数据类型以及范围例如int2等

第 8 章 数据类型
postgresql 10 数据类型 (完整版) - nickchou - 博客园

int2 2是字节长度,即16位。 无符号是2^16 = 65535 有符号是 32767

pg10的数据类型

类型名称别名描述
bigintint8有符号八字节整数
bigserialserial8自动递增八字节整数
bit (n)固定长度的bit字符串
bit varying (n)varbit (n)可变长度的bit字符串
booleanbool逻辑布尔值(true / false)
box平面上的矩形框
bytea二进制数据(“字节数组”)
character (n)char (n)固定长度的字符串
character varying (n)varchar (n)可变长度字符串
cidrIPv4或IPv6网络地址
circle平面上的圆圈
date日历日期(年,月,日)
double precisionfloat8双精度浮点数(8字节)
inetIPv4或IPv6主机地址
integerint, int4有符号的四字节整数
interval [ fields ] [ (p) ]时间跨度
json文本JSON数据
jsonb二进制JSON数据
line平面上的线
lseg平面上的线段
macaddrMAC(媒体访问控制)地址
macaddr8MAC(媒体访问控制)地址(EUI-64格式)
money货币金额
numeric (p, s)decimal (p, s)可选精度的精确数字
path平面上的几何路径
pg_lsnPostgreSQL日志序列号
point平面上的几何点
polygon平面上的闭合的几何路径
realfloat4单精度浮点数(4个字节)
smallintint2签名的双字节整数
smallserialserial2自动递增两个字节的整数
serialserial4自动递增四字节整数
text可变长度字符串
time (p) without time zone一天中的时间(没有时区)
time (p) with time zonetimetz一天中的时间,含时区
timestamp (p) without time zone日期和时间(没有时区)
timestamp (p) with time zonetimestamptz日期和时间,含时区
tsquery文本搜索查询
tsvector文本搜索文档
txid_snapshot用户级事务ID快照
uuid普遍唯一的标识符
xmlXML数据

数字

类型名称存储大小描述范围
smallint2 bytes整数(小范围)-32768 至 +32767
integer4 bytes整数(常用)-2147483648 至 +2147483647
bigint8 bytes整数(大范围)-9223372036854775808 至 +9223372036854775807
variable可指定精确精度小数点前最多131072位; 小数点后最多16383位
numeric (p,s)variable可指定精确精度小数点前最多131072位; 小数点后最多16383位
real4 bytes精度可变精度至少6位
double precision8 bytes精度可变精度至少15位
smallserial2 bytes自动递增整数(小范围)1 至 32767
serial4 bytes自动递增整数1 至 2147483647
bigserial8 bytes自动递增整数(大范围)1 至 9223372036854775807

货币

类型名称存储大小描述范围
money8 bytes货币金额,保留2位小数-92233720368547758.08 至 +92233720368547758.07
select '12.34567'::money; 
--------------------- ¥12.35 
/*查看货币类型*/ 
show lc_monetary; 
--------------------- Chinese (Simplified)_People's Republic of China.936
/*重设货币类型*/ 
set lc_monetary='C';
/*再次查询货币,发现货币类型改了*/ 
select '12.34567'::money; --------------------- $12.35
select '12.34567'::money; 
--------------------- ¥12.35 
/*查看货币类型*/ 
show lc_monetary; 
--------------------- Chinese (Simplified)_People's Republic of China.936
/*重设货币类型*/ 
set lc_monetary='C';
/*再次查询货币,发现货币类型改了*/ 
select '12.34567'::money; --------------------- $12.35

比较坑爹的是lc_monetary的设置是跟着数据库走的,也就是一个数据库只能有一种lc_monetary,所以不建议用money类型,改用numeric

字符串类型

类型名称存储大小描述
character (n)n如果存储的值比字段申明长度短,会用空白代替,不声明长度n默认是1
character varying (n)n如果存储的值比字段申明长度短,不会用空白代替,不声明长度n代表任意长度
text任意长度大文本使用
1 byte注意数据类型有引号,非一般用户用,主要用于内部系统目录中作为简单的枚举类型
64 bytes固定长度,非一般用户用,主要用于内部系统目录中存储标识符
  • character实际存储和显示的会用空白填充长度,但是比较字符串或者转换成其他字符串,填充的空白会被删除
  • character varying和text不会默认用空白填充长度,但文本本身尾部有空白的话不会默认去掉,这种空白是有意义的
  • 大多数情况下,字符串类型一般用character varying或text

二进制类型

类型名称存储大小描述
bytea1或4个字节加上实际的二进制字符串可变长度二进制字符串

等等