PostgreSQL学习笔记(一)

PostgreSQL学习笔记(一)

PostgreSQL简介

PostgreSQL是一个功能强大的开源对象关系数据库系统。以下是PostgreSQL数据库的优缺点:

优点:

  1. 开源免费,完全可以做到自主可控,支持在所有主流操作系统上运行。例如:LinuxFreeBSDOS XSolarisMicrosoft Windows
  2. 稳定性强,在应对引擎崩溃、断电等灾难场景下抗打击能力有了长足进步;
  3. 拥有丰富的数据类型(空间、几何、网络、jsonb),支持自定义类型,自定义操作符,方法重载,OO特性,支持分区表、物化视图、触发器、函数;
  4. 拥有丰富的语言集成支持,(pl/pgsql, java, c, python, perl, tcl)和开放数据库连接(ODBC)的编程接口;
  5. 丰富的索引类型

缺点:

  1. 因为使用了MVCC,数据库需要定期VACUUM,需要定期维护表和索引避免膨胀导致性能下降。(MVCC在后面会做详细解释)
  2. 没有很好的开源集群监控方案,需要自己做。
  3. 慢查询日志和普通日志是混在一起的,需要自己解析处理。

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。

  1. char(n)是带有空格填充的固定长度字符。如果插入的字段少于设置的n值,那么PostgreSQL会自动填充空格;如果插入字段大于n值,PostgreSQL只截取到n长度并报错。
  2. varchar(n)是可变长度字符串,最多可以存储n个长度的字符,当插入数据长度少于n时PostgreSQL不会添加空格。
  3. text是可变长度字符串,从理论上来讲,文本数据是一个长度不限的字符串。

大多数情况下应该选择text或者varchar。

数字类型

PostgreSQL提供两种不同类型的数字:整数、浮点数

  1. 整数:小整数(SMALLINT)、IntegerINT)、Serial  与整数相同,只是PostgreSQL会自动生成值并将值填充到SERIAL中。类似于MySQLAUTO_INCREMENT(自动递增)
  2. 浮点数: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冲突。