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。php

在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呢?html

 

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

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

在安装以前,先看看官方的安装说明老是一个好习惯sql

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

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服务器和第三方扩展包windows

sudo yum install postgresql95-server postgresql95-contrib -y

3. 初始化数据库(请看下面更新部分)缓存

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

---------------------------我是分割线,2016.10.26更新开始---------------------------服务器

3. 默认状况下,Postgresql安装目录是/usr/pgsql-9.5,而Postgresql的数据目录是/var/lib/pgsql/版本号/data目录,若是你从一开始就规划了/var很大磁盘空间,就没有问题,可是一旦你的/var目录空间并不大,那么就要考虑在安装Postgresql时指定安装目录了,在本例中,咱们假定/home的空间很大。

首先在/home下建立一个Postgresql的数据目录

sudo mkdir /home/postgresql_data

而后为这个目录指定全部者同时分配权限

sudo chown postgres:postgres /home/postgresql_data

sudo chmod 750 /home/postgresql_data

而后设置环境变量

export PATH=/usr/pgsql-9.5/bin:$PATH

export LD_LIBRARY_PATH=/usr/pgsql-9.5/lib

export PGDATA=/home/postgresql_data

而后使用命令initdb生成数据库簇,在此之此,请切换至postgres用户

initdb

最后尝试启动Postgresql服务

pg_ctl start -D $PGDATA

使用 ps -ef | grep postgres 验证,若是有一堆postgres相关进程,那就安装成功了。

若是就到此结束了,貌似第4步就无法作了,由于使用 systemctl start postgresql-9.5 将不会成功的,为啥呢?请打开 sudo vi /usr/lib/systemd/system/postgresql-9.5.service ,由于在#Location of database direcotry配置节里面没有指定正确的PGDATA。因此咱们须要将下面的PGDATA设置成正确值

#Location of database directory
Environment=PGDATA=/home/postgresql_data

---------------------------我是分割线,2016.10.26更新结束---------------------------

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

sudo systemctl enable postgresql-9.5.service

sudo 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.conf,还有一个配置文件也须要稍加关注,那就是访问控制配置文件/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 --permanent

sudo 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人员的杀手级技巧吧,关了程序从新打开,这时...

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