PostgreSQL学习笔记(一)
PostgreSQL简介
PostgreSQL是一个功能强大的开源对象关系数据库系统。以下是PostgreSQL数据库的优缺点:
优点:
- 开源免费,完全可以做到自主可控,支持在所有主流操作系统上运行。例如:Linux,FreeBSD,OS X,Solaris和Microsoft Windows等;
- 稳定性强,在应对引擎崩溃、断电等灾难场景下抗打击能力有了长足进步;
- 拥有丰富的数据类型(空间、几何、网络、jsonb),支持自定义类型,自定义操作符,方法重载,OO特性,支持分区表、物化视图、触发器、函数;
- 拥有丰富的语言集成支持,(pl/pgsql, java, c, python, perl, tcl)和开放数据库连接(ODBC)的编程接口;
- 丰富的索引类型
缺点:
- 因为使用了MVCC,数据库需要定期VACUUM,需要定期维护表和索引避免膨胀导致性能下降。(MVCC在后面会做详细解释)
- 没有很好的开源集群监控方案,需要自己做。
- 慢查询日志和普通日志是混在一起的,需要自己解析处理。
PostgreSQL数据结构
PostgreSQL数据库的数据类型大致有以下几种:Boolean(布尔型),Character(字符型),Numeric(数字类型),Temporal(时态数据类型),Array(数组类型),JSON,UUID(由RFC 4122、ISO/IEC 9834-8:2005以及相关标准定义的通用唯一标识符)。
接下来介绍一下几个基本的数据类型:
Boolean类型
boolean有true、false和null三种状态,同时支持以下文字类型输入。
Character类型
字符类型有三种:char,varchar,text。
- char(n)是带有空格填充的固定长度字符。如果插入的字段少于设置的n值,那么PostgreSQL会自动填充空格;如果插入字段大于n值,PostgreSQL只截取到n长度并报错。
- varchar(n)是可变长度字符串,最多可以存储n个长度的字符,当插入数据长度少于n时PostgreSQL不会添加空格。
- text是可变长度字符串,从理论上来讲,文本数据是一个长度不限的字符串。
大多数情况下应该选择text或者varchar。
数字类型
PostgreSQL提供两种不同类型的数字:整数、浮点数
- 整数:小整数(SMALLINT)、Integer(INT)、Serial 与整数相同,只是PostgreSQL会自动生成值并将值填充到SERIAL列中。类似于MySQL中的AUTO_INCREMENT(自动递增) 。
- 浮点数:float(n) 是一个浮点数,其精度至少为n,最大为8个字节。real或者float8是双精度(8字节)浮点数。numeric 或者numeric(p,s) 是带小数点后带有s数的p位的实数。
Array数组类型
PostgreSQL支持保存数组类数据
1、创建数组字段:
2、插入array数据的两种方式
3、查找array数据
4、修改array数据
JSON数据
1、创建表
2、插入数据
3、查看数据
4、访问JSON数据,Pg提供两种方式访问 JSON 数据: -> 和 ->> 前者返回json数据,后者返回text 格式
UUID数据
主要在分布式项目中防止id冲突。