postgresql 10 数据类型 (完整版)
官方数据类型document https://www.postgresql.org/docs/10/static/datatype.html
PostgreSQL拥有丰富的数据类型供用户使用。用户也可以使用 CREATE TYPE 命令向PostgreSQL添加新类型 。
通用的数据类型
表1是内置的通用数据类型, “别名”列中是PostgreSQL内部使用的名称,这是由于历史原因,某些内部使用或已弃用的类型未在此处列出。
此表基本能涵盖大部分正常的需求,更丰富的数据类型参考下面的明细,部分不常用的没来得及整理先参考官方链接的文档~~
类型名称 | 别名 | 描述 |
---|---|---|
bigint | int8 | 有符号八字节整数 |
bigserial | serial8 | 自动递增八字节整数 |
bit (n) | 固定长度的bit字符串 | |
bit varying (n) | varbit (n) | 可变长度的bit字符串 |
boolean | bool | 逻辑布尔值(true / false) |
box | 平面上的矩形框 | |
bytea | 二进制数据(“字节数组”) | |
character (n) | char (n) | 固定长度的字符串 |
character varying (n) | varchar (n) | 可变长度字符串 |
cidr | IPv4或IPv6网络地址 | |
circle | 平面上的圆圈 | |
date | 日历日期(年,月,日) | |
double precision | float8 | 双精度浮点数(8字节) |
inet | IPv4或IPv6主机地址 | |
integer | int, int4 | 有符号的四字节整数 |
interval [ fields ] [ (p) ] | 时间跨度 | |
json | 文本JSON数据 | |
jsonb | 二进制JSON数据 | |
line | 平面上的线 | |
lseg | 平面上的线段 | |
macaddr | MAC(媒体访问控制)地址 | |
macaddr8 | MAC(媒体访问控制)地址(EUI-64格式) | |
money | 货币金额 | |
numeric (p, s) | decimal (p, s) | 可选精度的精确数字 |
path | 平面上的几何路径 | |
pg_lsn | PostgreSQL日志序列号 | |
point | 平面上的几何点 | |
polygon | 平面上的闭合的几何路径 | |
real | float4 | 单精度浮点数(4个字节) |
smallint | int2 | 签名的双字节整数 |
smallserial | serial2 | 自动递增两个字节的整数 |
serial | serial4 | 自动递增四字节整数 |
text | 可变长度字符串 | |
time (p) without time zone | 一天中的时间(没有时区) | |
time (p) with time zone | timetz | 一天中的时间,含时区 |
timestamp (p) without time zone | 日期和时间(没有时区) | |
timestamp (p) with time zone | timestamptz | 日期和时间,含时区 |
tsquery | 文本搜索查询 | |
tsvector | 文本搜索文档 | |
txid_snapshot | 用户级事务ID快照 | |
uuid | 普遍唯一的标识符 | |
xml | XML数据 |
1、数字类型
Numeric Types - https://www.postgresql.org/docs/10/static/datatype-numeric.html
类型名称 | 存储大小 | 描述 | 范围 |
---|---|---|---|
smallint | 2 bytes | 整数(小范围) | -32768 至 +32767 |
integer | 4 bytes | 整数(常用) | -2147483648 至 +2147483647 |
bigint | 8 bytes | 整数(大范围) | -9223372036854775808 至 +9223372036854775807 |
decimal | variable | 可指定精确精度 | 小数点前最多131072位; 小数点后最多16383位 |
numeric (p,s) | variable | 可指定精确精度 | 小数点前最多131072位; 小数点后最多16383位 |
real | 4 bytes | 精度可变 | 精度至少6位 |
double precision | 8 bytes | 精度可变 | 精度至少15位 |
smallserial | 2 bytes | 自动递增整数(小范围) | 1 至 32767 |
serial | 4 bytes | 自动递增整数 | 1 至 2147483647 |
bigserial | 8 bytes | 自动递增整数(大范围) | 1 至 9223372036854775807 |
2、货币类型
Monetary Types - https://www.postgresql.org/docs/10/static/datatype-money.html
类型名称 | 存储大小 | 描述 | 范围 |
---|---|---|---|
money | 8 bytes | 货币金额,保留2位小数 | -92233720368547758.08 至 +92233720368547758.07 |
money固定小数点后2位,超过2位长度会四舍五入,仔细看会发现金额前面有货币类型,这个是根据服务端的lc_monetary设置的。
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
3、字符类型
Character Types - https://www.postgresql.org/docs/10/static/datatype-character.html
类型名称 | 存储大小 | 描述 |
---|---|---|
character (n) | n | 如果存储的值比字段申明长度短,会用空白代替,不声明长度n默认是1 |
character varying (n) | n | 如果存储的值比字段申明长度短,不会用空白代替,不声明长度n代表任意长度 |
text | 任意长度 | 大文本使用 |
"char" | 1 byte | 注意数据类型有引号,非一般用户用,主要用于内部系统目录中作为简单的枚举类型 |
name | 64 bytes | 固定长度,非一般用户用,主要用于内部系统目录中存储标识符 |
character实际存储和显示的会用空白填充长度,但是比较字符串或者转换成其他字符串,填充的空白会被删除
character varying和text不会默认用空白填充长度,但文本本身尾部有空白的话不会默认去掉,这种空白是有意义的
大多数情况下,字符串类型一般用character varying或text
4、二进制数据类型
Binary Data Types - https://www.postgresql.org/docs/10/static/datatype-binary.html
类型名称 | 存储大小 | 描述 |
---|---|---|
bytea | 1或4个字节加上实际的二进制字符串 | 可变长度二进制字符串 |
bytea 类型支持两种输入和输出格式:"escape" 和 "hex"
输出格式默认是 “hex”,可以通过配置参数bytea_output 进行修改,如下代码第一行,window下实测不改也不影响中文呈现,liunx下可能需要设置
set bytea_output = 'escape';
/* 创建表 */
CREATE TABLE testbytea (sid serial,info bytea);
/* 插入数据 */
insert into testbytea(info) values('内容1')
/* 如果数据量很大可以用 || 分批次追加更新内容,更新完后完整内容是 "内容1 hello2" */
update testbytea set info=info||cast(' hello2' as bytea) where sid=1;
/* 中文查询方式1:用默认的解码方式,再转一遍utf8可以直接解决中文呈现问题 */
select sid,convert_from(info, 'utf8') from testbytea;
-------+-------------
1 | 内容1 hello2
/* 中文查询方式2: 指定解码方式直接查询,中文显示有问题,字母和数字正常 */
select sid,encode(info,'escape')as info from testbytea;
--------+------------
1 | \345\206\205\345\256\2711 hello2
/* 中文查询方式2:注意convert_from没法直接放在上面的encode里嵌套,需要复制下文本再转换一下utf8 */
SELECT convert_from('\345\206\205\345\256\2711 hello2', 'utf8');
---------------------
内容1 hello2
5、日期/时间类型
Date/Time Types - https://www.postgresql.org/docs/10/static/datatype-datetime.html
类型名称 | 存储大小 | 描述 | 最小值 | 最大值 | 最小精度 |
---|---|---|---|---|---|
timestamp (p) without time zone | 8 bytes | 日期和时间 (不含时区) | 公元前 4713年 | 公元 294276年 | 微秒 |
timestamp (p) with time zone | 8 bytes | 日期和时间 (含时区) | 公元前 4713年 | 公元 294276年 | 微秒 |
date | 4 bytes | 日期,不含时间 | 公元前 4713年 | 公元 5874897年 | 天 |
time (p) without time zone | 8 bytes | 时间,不含日期 (不含时区) | 00:00:00 | 24:00:00 | 微秒 |
time (p) with time zone | 12 bytes | 时间,不含日期 (含时区) | 00:00:00+1459 | 24:00:00-1459 | 微秒 |
interval [ fields ] (p) | 16 bytes | 时间间隔 | -178000000 年 | 178000000 年 | 微秒 |
timestamp如果只填写时间则认为没有时区,时区作为一个可选参数
time、timestamp和interval接受一个可选的精度值p,指在seconds中保留的小数位数,默认没有限制但不能超过6 ( 注意: p范围是0到6 )
/*没有时区,p>6时的结果与p=6结果一致。使用pgAdmin添加timestamp字段时提示长度不能大于9是错误的,应是不能大于6*/
select timestamp(6) without time zone '2018-08-01 12:01:01.12345678910';
---------------------
2018-08-01 12:01:01.123457
/*有时区 */
select timestamp(6) with time zone '2018-08-01 12:01:01.12345678910';
---------------------
2018-08-01 12:01:01.123457+08
interval 类型有一个附加选项,它通过编写以下短语之一来限制存储字段集:
YEAR
MONTH
DAY
HOUR
MINUTE
SECOND
YEAR TO MONTH
DAY TO HOUR
DAY TO MINUTE
DAY TO SECOND
HOUR TO MINUTE
HOUR TO SECOND
MINUTE TO SECOND
6、布尔类型
Boolean Type Types - https://www.postgresql.org/docs/10/static/datatype-boolean.html
类型名称 | 存储大小 | 描述 |
---|---|---|
boolean | 1 bytes | true 或 false |
true状态的有效字符为: TRUE 't' 'true' 'y' 'yes' 'on' '1'
false状态的有效字符为: FALSE 'f' 'false' 'n' 'no' 'off' '0'
7、枚举类型
Enumerated Types - https://www.postgresql.org/docs/10/static/datatype-enum.html
使用CREATE TYPE命令创建枚举类型
CREATE TYPE mood AS ENUM ('sad', 'ok', 'happy');
CREATE TABLE person (
name text,
current_mood mood
);
INSERT INTO person VALUES ('Moe', 'happy');
SELECT * FROM person WHERE current_mood = 'happy';
name | current_mood
------+--------------
Moe | happy
(1 row)
和代码里的枚举类似,每个枚举有对应的一个值,所以可以实现 WHERE current_mood > 'sad' (查出'ok' 和 'happy') 或者 ORDER BY current_mood DESC (根据枚举对应的值进行排序,非字符串)
8、几何类型
Geometric Types - https://www.postgresql.org/docs/10/static/datatype-geometric.html
类型名称 | 存储大小 | 描述 | 示例 |
---|---|---|---|
point | 16 bytes | 平面坐标 | (x,y) |
line | 32 bytes | 无穷线 | {A,B,C} |
lseg | 32 bytes | 线段 | ((x1,y1),(x2,y2)) |
box | 32 bytes | 矩形框 | ((x1,y1),(x2,y2)) |
path | 16+16n bytes | 多边形封闭路径 | ((x1,y1),...) |
path | 16+16n bytes | 开放路径 | [(x1,y1),...] |
polygon | 40+16n bytes | 多边形(类似封闭路径) | ((x1,y1),...) |
circle | 24 bytes | 圆形 | <(x,y),r> (center point and radius) |
9、网络地址类型
Network Address Types - https://www.postgresql.org/docs/10/static/datatype-net-types.html
类型名称 | 存储大小 | 描述 |
---|---|---|
cidr | 7 or 19 bytes | IPv4 and IPv6 networks |
inet | 7 or 19 bytes | IPv4 and IPv6 hosts and networks |
macaddr | 6 bytes | MAC addresses |
macaddr8 | 8 bytes | MAC addresses (EUI-64 format) |
10、二进制字符串类型
Bit String Types - https://www.postgresql.org/docs/10/static/datatype-bit.html
10、网络地址类型
Network Address Types - https://www.postgresql.org/docs/10/static/datatype-net-types.html
11、文本搜索类型
Text Search Types - https://www.postgresql.org/docs/10/static/datatype-textsearch.html
tsvector:类型表示以文本搜索优化的形式的文档
tsquery:类型类似地表示文本查询
12、UUID类型
UUID Type - https://www.postgresql.org/docs/10/static/datatype-uuid.html
此数据类型称为全局唯一标识符,或称为GUID,此标识符是128位数量,由选择的算法生成,其他人不基本不可能生成相同的唯一标识。
示例标识符如下:
A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11
{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}
a0eebc999c0b4ef8bb6d6bb9bd380a11
a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11
{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}
13、XML类型
XML Type - https://www.postgresql.org/docs/10/static/datatype-xml.html
用于存储XML数据, 它与在文本字段中直接存储XML数据的优势是它会检查输入值的格式是否正确,并且有支持函数对其执行类型安全操作;
14、JSON类型
JSON Type - https://www.postgresql.org/docs/10/static/datatype-json.html
此类数据也可以存储为text,但JSON数据类型的优点是可以根据JSON规则强制每个存储的值有效。还有各种特定于JSON的函数和运算符可用于存储在这些数据类型中的数据,JSON有两种数据类型 json和jsonb,两种类型的主要区别是效率:
json:可以理解为纯文本插入,插入效率高,实际解析时候需要重新执行分析
jsonb:存储为二进制,插入效率略慢,但处理要快很多,因为不需要重新分析,且jsonb还支持索引,一般大部分程序会使用jsonb。
15、Arrays类型
Arrays - https://www.postgresql.org/docs/10/static/arrays.html
16、复合类型
Composite Types- https://www.postgresql.org/docs/10/static/rowtypes.html
17、范围类型
Range Types- https://www.postgresql.org/docs/10/static/rangetypes.html
18、对象标识类型
Object Identifier Types - https://www.postgresql.org/docs/10/static/datatype-oid.html
19、pg_lsn类型
pg_lsn Type - https://www.postgresql.org/docs/10/static/datatype-pg-lsn.html
20、伪类型
Pseudo-Types - https://www.postgresql.org/docs/10/static/datatype-pseudo.html
postgresql 10 数据类型 (完整版)的更多相关文章
- 使用sysbench测试mysql及postgresql(完整版)
使用sysbench测试mysql及postgresql(完整版) 转载请注明出处https://www.cnblogs.com/funnyzpc/p/14592166.html 前言 使用sysbe ...
- 阿里云96页报告详解《云上转型》(10个案例、10大趋势/完整版PPT)
阿里云96页报告详解<云上转型>(10个案例.10大趋势/完整版PPT) 2017-12-29 14:20阿里云/云计算/技术 ﹃产业前沿超级干货﹄ ﹃数据观○重磅速递﹄ 阿里云研究中心云 ...
- 《死磕 Elasticsearch 方法论》:普通程序员高效精进的 10 大狠招!(完整版)
原文:<死磕 Elasticsearch 方法论>:普通程序员高效精进的 10 大狠招!(完整版) 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链 ...
- 老王Python培训视频教程(价值500元)【基础进阶项目篇 – 完整版】
老王Python培训视频教程(价值500元)[基础进阶项目篇 – 完整版] 教学大纲python基础篇1-25课时1.虚拟机安装ubuntu开发环境,第一个程序:hello python! (配置开发 ...
- Asp.NET Core2.0 项目实战入门视频课程_完整版
END OR START? 看到这个标题,你开不开心,激不激动呢? 没错,.net core的入门课程已经完毕了.52ABP.School项目从11月19日,第一章视频的试录制,到今天完整版出炉,离不 ...
- 【ELK】4.spring boot 2.X集成ES spring-data-ES 进行CRUD操作 完整版+kibana管理ES的index操作
spring boot 2.X集成ES 进行CRUD操作 完整版 内容包括: ============================================================ ...
- 常用经典SQL语句大全完整版--详解+实例 (存)
常用经典SQL语句大全完整版--详解+实例 转 傻豆儿的博客 http://blog.sina.com.cn/shadou2012 http://blog.sina.com.cn/s/blog_84 ...
- 常用经典SQL语句大全完整版--详解+实例 《来自网络,很全没整理,寄存与此》
常用经典SQL语句大全完整版--详解+实例 下列语句部分是Mssql语句,不可以在access中使用. SQL分类: DDL—数据定义语言(CREATE,ALTER,DROP,DECLARE) DML ...
- Linux学习总结(1)——Linux命令大全完整版
Linux命令大全完整版 目 录I 1. linux系统管理命令1 adduser1 chfn(change finger information)1 chsh(change shell)1 d ...
随机推荐
- javascript 计算倒计时
function timeDown(second) { var month = '', day = '', hour = '', minute = ''; if (second >= 86400 ...
- hibernate的get() load() 和find()区别
如果找不到符合条件的纪录,get()方法将返回null.如果找不到符合条件的纪录,find()方法将返回null.如果找不到符合 条件的纪录,load()将会报出ObjectNotFoundEccep ...
- hadoop: Shuffle过程详解 (转载)
原文地址:http://langyu.iteye.com/blog/992916 另一篇博文:http://www.cnblogs.com/gwgyk/p/3997849.html Shuffle过程 ...
- TCP/IP网络编程之多进程服务端(一)
进程概念及应用 我们知道,监听套接字会有一个等待队列,里面存放着不同客户端的连接请求,如果有一百个客户端,每个客户端的请求处理是0.5s,第一个客户端当然不会不满,但第一百个客户端就会有相当大的意见了 ...
- WEBs
http://www.cnblogs.com/wupeiqi/articles/5341480.html 请求方式8种: 1.GET:请求指定页面信息,并返回实体 2.POST:向指定资源提交数据进行 ...
- Java中Scanner中nextLine()方法和next()方法的区别
https://blog.csdn.net/hello_word2/article/details/54895106
- 设计模式之第9章-原型模式(Java实现)
设计模式之第9章-原型模式(Java实现) “快到春节了,终于快放假了,天天上班好累的说.”“确实啊,最近加班比较严重,项目快到交付了啊.”“话说一到过节,就收到铺天盖地的短信轰炸,你说发短信就发吧, ...
- Android之Bitmap 高效加载
一张图片(BitMap)占用的内存=图片长度*图片宽度*单位像素占用的字节数 图片格式(Bitmap.Config) 一张100*100的图片占用内存的大小 ALPHA_8 图片长度*图片宽度 100 ...
- Codeforces #1063C Dwarves, Hats and Extrasensory Abilities
题目大意 交互题. 输出平面上的一个点的坐标,交互程序给这个点染色(白或黑). 如此重复 $n$ 次($ 1\le n \le 30$). 要求输出的 $n$ 个点各不相同,并且不论交互程序怎样给它们 ...
- Linux(Centos) 搭建ReviewBoard
一.官方安装手册 reviewboard 的安装用户手册:猛击这里 二.常用安装步骤 2.1.安装httpd,+ mod_wsgi, fastcgi, or mod_python yum -y int ...