首页 > 代码库 > CentOS7下安装并简单设置PostgreSQL笔记

CentOS7下安装并简单设置PostgreSQL笔记

为什么是PostgreSQL?

在.NET Core诞生之前,微软平台上最常见的开发组件便是.NET Framework + SQL Server了,但是现在.NET Core终于让跨平台部署成为了现实,这一模式还会常见吗?个人认为这一黄金搭档很可能会日渐势微了,因为未来很多的.NET应用将部署在Linux上,为了使用SQL Server,人们又部署一个Windows环境吗?想想都觉得不大可能,那么为Linux上的.NET Core选择一款合适的数据库就变得非常重要。其实也不难选,因为就两个选项,一个是MySQL(The world’s most popular open-source database),另一个是PostgreSQL(The world‘s most advanced open source database),从目前我的认知而言,我选择了PostgreSQL。

在51job上全文搜索MySQL,有1568页内容,而全文搜索PostgreSQL则只有44页内容(2016年9月16日数据),这说明使用MySQL的企业和从业人员数据远超PostgreSQL数据,那为什么我还要选择PostgreSQL呢?这要从三个方面谈起,一是我曾学习并使用过MySQL,感觉MySQL上手容易,精通困难,一般程序员没有经过培训驾驭不了MySQL,当时有个项目,开发阶段貌似和SQL Server区别不大,但是系统部署到生产环境之后很快性能问题就会暴露出来了,为此我不得不赶鸭子上架,边学边用,重构了整个数据访问层,(有同学可能会问了,PostgreSQL可能比MySQL还要难上手,额,我最担心的是项目组中有人SQL脚本技术不过关,MySQL对于脚本的优化做的又不咋滴...);第二是我目前对GIS应用系统比较感兴趣,而PostgreSQL有一个MySQL无法比拟的优势,那就是PostGIS,PostGIS可以完美支持空间数据存储和空间分析;三是从PostgreSQL9.3起就内置了JSON数据类型,而9.4又开始支持JSONB,这标志着PostgreSQL实际上已经是一个关系型数据库和NoSQL数据库的结合体了,而且有消息表明,PostgreSQL的NoSQL性能有益到甚至超过了MongoDB!,这对于GIS大数据应用是多么好的一个消息啊。我还有什么理由拒绝PostgreSQL呢?

 

~~~~~~~~~~~~~~~~我是分割线,以上都是废话~~~~~~~~~~~~~~~~

安装环境:CentOS7.2,与此处环境相同

在安装之前,先看看官方的安装说明总是一个好习惯

CentOS7.2中自带的PostgreSQL是9.2版本的,里面没有NoSQL特性,因此我们使用rpm包安装方式,PostgreSQL的repository包地址列表在这里。

1. 首先安装PostgreSQL的rpm

sudo yum install http://yum.postgresql.org/9.5/redhat/rhel-7-x86_64/pgdg-redhat95-9.5-2.noarch.rpm -y

2. 然后再安装PostgreSQL服务器和第三方扩展包

sudo yum install postgresql95-server postgresql95-contrib -y

3. 初始化数据库

sudo /usr/pgsql-9.5/bin/postgresql95-setup initdb

4. 配置数据库服务开机启动并立即启动数据库服务

sudo systemctl enable postgresql-9.5.servicesudo service postgresql-9.5 start

5. 检查数据库服务状态,有绿色,没红色说明启动OK了

service postgresql-9.5 status

技术分享

6. 修改postgres用户密码,切换到postgres用户

sudo passwd postgres

su postgres

技术分享

7. 然后使用psql工具登录数据库,列出当前的数据库,命令分别是 psql 和 \l 

技术分享

在CentOS上,默认的PostgreSQL数据目录是/var/lib/pgsql/版本号/data

PostgreSQL的配置文件就在这个目录下/var/lib/pgsql/版本号/data/postgresql.confg,还有一个配置文件也需要稍加关注,那就是访问控制配置文件/var/lib/pgsql/版本号/data/pg_hba.conf

8. 下面需要先对服务配置文件postgresql.conf进行一些设置:

将 #listen_addresses = ‘localhost‘ 前的#号去掉,然后将后面的localhost改为*,然后将 #port = 5432 前的#去掉,最后再将 #password_encryption = on 前面的#号去掉,如下图所示,使用wq命令保存退出。

技术分享

(友情提示:postgresql.conf中可以修改的参数很多,上图中第2个红框可以修改侦听端口,另外此文件内还可以修改缓存大小等多种参数)

9. 再对pg_hba.conf内容进行配置,将上面红框内的ident改为md5,然后再在最下面加入 host all all 0.0.0.0/0 md5 ,如下图所示:

技术分享

10. 重启postgresql-9.5服务,使配置文件重效

service postgresql-9.5 restart

11. 接下来我们创建一个数据库

psql
CREATE DATABASE testdb;

如下图所示,我们就创建了一个名为testdb的数据库,

技术分享

12.然后再创建一名用户

CREATE USER think8848 CREATEDB LOGIN PASSWORD 111111

如下图所示,这样我们就创建了一个名为think8848的用户,后面的 CREATEDB LOGIN PASSWORD 111111 意思是这个用户可以创建数据库,还可以登录,他的密码是111111

技术分享

13. 接下来将testdb的所有权限都分配给think8848同学

GRANT ALL ON DATABASE testdb TO think8848

技术分享

14. 退出postgres用户登录,命令为\q, 对,你没看错,就是一个反斜杠和一个q

15. 开启防火墙5432端口

sudo firewall-cmd --zone=public --add-port=5432/tcp --permanentsudo firewall-cmd --reload

16. 尝试用think8848登录数据库

psql -U think8848 -h 127.0.0.1 -p 5432 -d testdb -W

技术分享

最后,再说两个psql很常用的命令,一个\c,切换数据库,如: \c postgres; ,它的作用和SQL Server的 use postgres; 一样;另一个是\d,此命令是列出当前库下所有的表。

 技术分享

17. 我打算使用PostgreSQL做数据库服务器,但是从没打算使用psql当管理工具,所以还是要找个GUI的管理工具才行啊,也不知道哪个好,先随手抓过来一个用用看,pgAdmin4,下载地址在这里 ,

先建个Server看看都有什么

技术分享

再给起个响亮点的名称

技术分享

然后再配置服务器IP等信息

技术分享

点了Save后并没有什么反应,在Servers上点击右键Refresh,还是没有什么效果,难道这货没有用?好吧,再试试IT人员的杀手级技巧吧,关了程序重新打开,这时...

技术分享

看起来还不错,可以用图形化界面管理数据库,然后又是免费的,我们不能要求太多,对吧?

 

CentOS7下安装并简单设置PostgreSQL笔记