由于在学校针对作业和毕设 MySQL 已经很够用了,因此也没有做更多对数据库的功课,只知道 Oracle 数据库适合企业,MySQL 适合小型项目,但是工作以后的第一个项目就接触的是陌生的 PostgreSQL 数据库,才发现原来还有这么好用的开源数据库,正好趁新冠肺炎这个被动假期时间把它好好学一遍。
主要书籍是 《PostgreSQL 修炼之道:从小工到专家》
JD链接:PostgreSQL 修炼之道:从小工到专家

PDF 下载 (Google Drive):PostgreSQL 修炼之道从小工到专家.pdf
无论如何工具书还是入正比较好,个人是因为快递延缓发货,一边等书一边 PDF 先学习起来。况且只在读完两章后就感叹唐成老师这本书写的真的很好,对 PostgreSQl 的特性和基础 SQL语句的解释都很详细,即使是从没这方面基础的也可以收获很多。
关于 PostgreSQL 的介绍,书中已经写的很详细了,就不再做过多的赘述。
吸引我的地方无非几点:
- 免费开源(最重要的原因)
- 有稳定的更新和问题反馈渠道
- 占用低,即使是阿里的轻量都能跑 Django+PostgreSQL
- Navicat for PostgreSQL 价格低,150/3 月,1000 买断,真香
而再看使用上的优点则太多了:
- 支持数据库中创建对象,对多个项目用同数据库的太友好!
- 支持列表 list 类型数据的存取
- 支持 JSON、xml 类型数据的存取
- INSERT INTO table VALUES () ON CONFLICT() DO UPDATE/NOTHING 约束时处理(专属神器,太好用了,不知道省了多少时间)
列举几个我没有系统学习之前,用的时候发现的优点,我想在其中总有一个点会戳中后端开发人员的心。
1、直接开始吧那就!首先当然是 PostgreSQL 的安装。
PostgreSQL 支持 Linux、Mac OS 和 Windows 下安装,而且方法相当简单,由于我是为了部署项目数据库,因此这里以 CentOS7 为例。
注:这里安装的是 9.2.24 版本的,如果需要 12+ 版本的可参考这个博文 PostgreSQL 学习笔记(一) 补足:12.8 版本数据库的安装
运行
yum install postgresql-server.x86_64

当然在安装前可以先运行
psql --version
查看下云服务等是否自带了低版本 Postgresql 数据库。
安装之后,记得先初使用化数据库再启动
service postgresql initdb
service postgresql start
service postgresql status
显示 running 就说明数据库已经安装完成了。

2、登录到数据库。
PostgreSQL 在安装时默认会添加用户 postgres,运行
su - postgres
先切换到 postgres 用户下,再输入
psql
就进入到 PostgreSQL 数据库中了。

这里推荐先把 postgres 用户的密码改掉:
ALTER USER postgres WITH PASSWORD <password>;
注意:这里的命令是在数据库中运行的,即 postgres=#: 下。
3、远程连接,如果你要在 Navicat 等工具中使用这个数据库,还需要做些配置。
首先是 postgresql.conf 文件的配置
vi /var/lib/psql/data/postgresql.conf
修改
listen_addresses = '*'
port = 5432
max_connections = 100

保存退出即可。
然后再修改 pg_hba.conf 这个文件,路径和刚刚相同
vi /var/lib/psql/data/pg_hba.conf
在最后添加这条
host all all 0.0.0.0/0 md5
当然开放访问的 IP 视自己情况而定,这里因为腾讯云服务器安全组全开而且机器连防火墙都没开我也就自暴自弃了,后面会再专做一个项目部署时端口等的初步设置以保障最基础的安全性。

都保存以后重启 PostgreSQL 服务,再尝试远程连接吧!
service postgresql restart

至此,PostgreSQL 的学习环境就已经安装完成了,如果想升级为开发环境,就像之前强调的一是防火墙要开,端口要适当开放;二是版本最好升级到 10+,以使用最新的特性。
附上书的目录:



基础篇涉及到所有支持存储的数据类型,并且所有 PostgreSQL 的基础操作也都做了详解,是肯定要认真学习并做好笔记的。
提高篇的 PostgreSQL 特有正则表达式很值得学习,索引、序列和锁由于自身之前用的不多,也再过一遍好了。
而之后的数据库优化和第三方开源软件及架构在这次学习中只会做了解,在项目进行或是完成后再结合实际情况学习可能效果会更好。