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

---------------------------我是分割线,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

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

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

sudo passwd postgres

su postgres

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

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

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

在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命令保存退出。

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

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

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

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

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

service postgresql-9.5 restart

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

psql
CREATE DATABASE testdb;

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

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

12.然后再创建一名用户

CREATE USER think8848 CREATEDB LOGIN PASSWORD ''

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

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

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

GRANT ALL ON DATABASE testdb TO think8848

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

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

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

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

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

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

先建个Server看看都有什么

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

再给起个响亮点的名称

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

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

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

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

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

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

上一篇:java过滤器Filter笔记


下一篇:PKUWC 2018 滚粗记