这次在测试中需要使用PostgreSQL来验证某一具体功能是否正确,需要使用较为新一点的版本,因此就借此机会:
- 安装和配置PostgreSQL;
- 学习一些基本的用法。
安装PostgreSQL
先是凭着直觉去了PostgreSQL的官网 翻了翻文档,下载了两个比较常用版本的Manual,然后刚要着手安装,却发现需要使用源码编译的方式!
使用源码在RHEL安装PostgreSQL
我其实并不排斥使用源码编译并安装应用,只是觉得这个方式比较慢,且容易出错(对我而言),如果有更好的alternative approach,我当然不会使用源码来安装它。
这里不介绍太多,如果需要的话,大家可以自行下载PostgreSQL Manual文档,里面大概第15章有较为详细的介绍,不再赘述了。
使用rpm packages安装PostgreSQL
尽管PostgreSQL官网没有明显的链接,随便一个搜索引擎就能很容易搜索到这样一个网站PostgreSQL RPM很明显,这个是PostgreSQL官网下的一个二级网站,费解的是不知道为什么没有放到明显的位置,不知道是否源码编译方式是否能够更有效地利用系统资源(猜测)。
下面介绍如何使用rpm packages在RHEL5上安装PostgreSQL。按照推荐,安装过程其实非常简单:
推荐的安装方式
-1,使用wget获取到包含PostgreSQL rpm mirror配置的package
wget http://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-centos94-9.4-1.noarch.rpm
-2, 安装所获取到的package
sudo rpm -ivh pgdg-centos94-9.4-1.noarch.rpm
-3,使用yum groupinstall安装PostgreSQL
sudo yum groupinstall "PostgreSQL Database Server 9.4 PGDG"
如果你的网络足够的好运,此处你应该已经安装成功了,否则可能会提示无可用的mirror这样的错误了。
不幸的是,我的网络没那么好运气! 我在安装过程中却发现了我的服务器无法连接到mirror,下载不到安装所需要的rpm package。不知道是否因为这些mirror是否都被挡在了墙外,不得不workaround:
有CN特色的安装方式
上文中讲到提示无法找到可用的mirror,之所以要找mirror是因为需要下载对应的package,那么我帮你下载到本地,然后直接安装就可以了(就是这么简单):
-1, 下载PostgreSQL所需要的Server, Libs, Contrib, Client等rpm packages
- *1.1 这里[PostgreSQL for RHEL5](http://yum.postgresql.org/9.4/redhat/rhel-5-x86_64/repoview/postgresqldbserver94.group.html) 可以下载上述所需要的rpm文件们;*
- *1.2 最好被他们都放在同一个目录下,这样做的好处是即使rpm packages直接有依赖关系,也可以让系统自己去决定安装先后顺序。 *
-2,使用yum安装所下载到的rpm package
sudo yum install *.rpm
然后一路确认下去,最后就得到了安装成功的提示了。
So, now the installed PostgreSQL instance is ready for use!
简单配置PostgreSQL
成功安装了PostgreSQL之后,现在可以使用它来测试了:一般情况下,安装之后,需要启动服务,然后方能正常使用。先来看看安装PostgreSQL之后,是否有服务安装了,RHEL下,这些服务通常会在/etc/init.d/
目录下有对应的启动脚本。查看后发现/etc/init.d/
目录下多出了一个文件postgresql-9.4
还是惯例,以root身份启动这个服务,不过这里有可能会提示你启动失败,是因为PostgreSQL 9.4会要求先初始化数据库,然后才能提供服务,提示信息如下:
/var/lib/pgsql/9.4/data is missing. Use "service postgresql-9.4 initdb" to initialize the cluster first.
所以,安装PostgreSQL 9.4之后,正确的使用流程应该是:
-1, 先初始化db
sudo service postgresql-9.4 initdb
此处需要执行一点时间, Be patient!
-2,启动PostgreSQL9.4服务
sudo service postgresql-9.4 start
此处应该能看到绿色的[OK]啦!然后就可以使用PostgreSQL了!
-3, 验证启动结果
- 3.1 安装PostgreSQL成功之后,系统就会自动创建用户postgres这个用户,可以通过查看`/etc/passwd`这个文件,确定是否正确创建了这个用户;
- 3.2 切换到用户postgres登录,使用如下命令查看是否可以正常登录到PostgreSQL数据库,如果提示“postgres=#”则表示已经正确创建了postgres数据库并能正确使用这个数据库了!
-bash-3.2$ psql
psql (9.4.8)
Type "help" for help.
postgres=#
-4,创建用户和库
现在可以创建业务所使用的用户和数据库了,其实创建过程也比较简单(也许没有追求太深入,留后深造!),下面给出主要的命令:
- 4.1 先在root用户下创建一个系统用户 wh
useradd -s /bin/bash -d /home/wh -p passw0rd wh
- 4.2 然后在postgres用户下连接到PostgreSQL Server,执行如下的用户创建命令:
-bash-3.2$ psql
psql (9.4.8)
Type "help" for help.
postgres=# CREATE USER wh WITH PASSWORD 'passw0rd';
- 4.3 创建数据库并授权给所创建的用户
-bash-3.2$ psql
psql (9.4.8)
Type "help" for help.
postgres=# CREATE DATABASE test_db OWNER wh;
postgres=# GRANT ALL PRIVILEGES ON DATABASE test_db TO wh;
postgres=# \q
- 4.4 切换到wh在用户,尝试连接到数据库
-bash-3.2$ psql test_db
psql (9.4.8)
Type "help" for help.
test_db=>
至此,已经能够正确使用新创建的用户wh成功连接到新创建的PostgreSQL数据库了!
客户端访问PostgreSQL Server
通过上文所做的操作,已经能够让你在PostgreSQL所在机器本身操作创建的数据库了,但是,通常情况下,我们需要从其他的机器连接到数据库服务器,以便更好的让应用服务器和数据库服务器都能发挥出更佳的性能。
通过客户端连接PostgreSQL
- 1, 通过PostgreSQL Client尝试连接到PostgreSQL Server,却被提示无法连接:
$ psql -h 192.168.1.101 -p 5432 -U wh test_db -W
Password for user wh:
psql: could not connect to server: Connection refused
Is the server running on host "192.168.1.101" and accepting
TCP/IP connections on port 5432?
其原因是因为默认情况下,PostgreSQL虽然正确启动了,数据库服务器本身也能够正常的访问,但是,其他的机器并不能通过TCP/IP连接到PostgreSQL服务,默认它并未监听任何TCP/IP端口。
- 2, 这里就需要配置TCP/IP监听,以便允许其他机器访问PostgreSQL服务:
sudo vim /var/lib/pgsql/9.4/data/postgresql.conf
# 1, 修改listen_addresses = '*'
# 2, 修改port = 5432
# 3, 取消对应行的注释
# 重启PostgreSQL服务
sudo service postgresql-9.4 restart
Stopping postgresql-9.4 service: [ OK ]
Starting postgresql-9.4 service: [ OK ]
- 3, 再次从客户端尝试连接到PostgreSQL服务
$ psql -h 192.168.1.101 -p 5432 -U wh test_db -W
Password for user wh:
psql: FATAL: no pg_hba.conf entry for host "192.168.1.102", user "wh", database "test_db", SSL off
出现这个错误有两方面的解释:
- 首先,端口5432已经开放监听了,并且接收到了PostgreSQL客户端的连接请求;
- 其次, 验证客户端连接合法性出错了,因为客户端“192.168.1.102”并未被允许连接。
- 4,添加客户端到白名单
在PostgreSQL服务器上修改配置文件/var/lib/pgsql/9.4/data/pg_hba.conf
sudo vim /var/lib/pgsql/9.4/data/pg_hba.conf
# 添加允许IP 192.168.1.102连接的配置项
host all all 192.168.1.102/32 md5
回到客户端再次尝试连接,你就会发现这次是可以成功连接到PostgreSQL服务了。
$ psql -h 192.168.1.101 -p 5432 -U wh test_db -W
Password for user wh:
psql (9.4.8)
Type "help" for help.
test_db=>
至此,PostgreSQL已经可以在远端Client正常使用了。