安装PostgreSQL

  1. yum install http://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-centos96-9.6-3.noarch.rpm
  2. yum install -y postgresql96-server

安装完成后,执行如下指令:

  1. [root@localhost ~]# /usr/pgsql-9.6/bin/postgresql96-setup initdb
  2. Initializing database ... OK
  3. [root@localhost ~]# systemctl enable postgresql-9.6.service
  4. Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql-9.6.service to /usr/lib/systemd/system/postgresql-9.6.service.
  5. [root@localhost ~]# systemctl start postgresql-9.6.service

第一条指令初始化数据库,后面两条指令分别将 PostgreSQL 以服务方式启用,并启动服务。
PostgreSQL 的安装路径(家目录)为:/var/lib/pgsql/,使用“su - postgres”切换到 postgre 用户并进入其家目录。在家目录下,有版本号为名称的子目录(如“9.6/”),数据/配置文件存放在“版本号/data”子目录下。例如,当安装 PostgreSQL 9.6 时,数据/配置文件存放在“/var/lib/pgsql/9.6/data/”路径下。

创建用户和数据库

PostgreSQL 安装完成后,自动创建名称为 postgres 的 Linux 用户,可使用该用户对 PostgreSQL 数据库进行管理操作。
执行如下指令,切换到 postgres 用户,并执行用户和数据库的创建操作:

  1. [root@localhost ~]# su - postgres
  2. Last login: Thu Oct 20 21:58:51 CST 2016 on pts/0
  3. -bash-4.2$ createuser -P root
  4. Enter password for new role:
  5. Enter it again:
  6. -bash-4.2$ createdb -O root root
  7. -bash-4.2$ psql
  8. psql (9.9.1)
  9. Type "help" for help.
  10. postgre=# \q
  11. -bash-4.2$

上面的指令中,先使用 su - 切换到 postgres 用户,使用 postgres 用户的环境变量并进入其家目录(/var/lib/pgsql/)。
createuser 指令将创建 PostgreSQL 数据库用户“root”,-P 参数要求设置该用户的密码,后面两行输入密码和确认密码。苏-
createdb 指令创建名称为“root”的数据库,后续数据将保存到此数据库下。-O 参数指定该数据库的拥有者(Owner)为“root”用户。
最后,psql 指令可登录进入数据库,由于没有指定任何参数,因此使用缺省用户(postgres)登录进入缺省数据库(postgres),其认证方式为使用操作系统当前用户进行认证,由于当前操作系统用户已经为“postgres”,因此无需输入任何密码,直接可以登录进入。“\q” 指令退出登录,退回到 Bash 提示符状态。
我们新创建用户 root 使用的认证方式为密码认证,当前配置下无法使用 psql 命令登录,接下来我们对数据库进行必要的配置,使可以使用 root 用户从本地或远程登录数据库。
如果需要修改数据库用户的密码,可以执行

  1. # su - postgres
  2. -bash-3.2$ psql -U postgres
  3. postgres=# alter user postgres with password 'new password';
  4. postgres=# \q

配置 PostgreSQL
数据库的配置文件存放在数据文件路径(/var/lib/pgsql/9.6/data/)目录下,使用“su - postgres”切换用户后,可以编辑以下配置文件:【postgresql.conf

  1. ......
  2. #------------------------------------------------------------------------------
  3. # CONNECTIONS AND AUTHENTICATION
  4. #------------------------------------------------------------------------------
  5. # - Connection Settings -
  6. listen_addresses = '*' # what IP address(es) to listen on;
  7. # comma-separated list of addresses;
  8. # defaults to 'localhost'; use '*' for all
  9. ......

上述配置确保从其他计算机也可以连接到数据库。
打开 pg_hba.conf,到最后几行,增加如下一行配置:【pg_hba.conf】

  1. ......
  2. # TYPE DATABASE USER ADDRESS METHOD
  3. # "local" is for Unix domain socket connections only
  4. local all all peer
  5. # IPv4 local connections:
  6. host all all 127.0.0.1/32 md5
  7. host all all 10.10.0.0/20 md5
  8. # IPv6 local connections:
  9. host all all ::1/128 md5
  10. # Allow replication connections from localhost, by a user with the
  11. # replication privilege.
  12. #local replication postgres peer
  13. #host replication postgres 127.0.0.1/32 ident
  14. #host replication postgres ::1/128 ident

新增 82 行配置,确保从研发网段 10.10.0.0/20 可以使用所有用户以密码认证方式(password 或 md5,前者传递密码明文,后者传递 MD5 摘要,更安全)登录进入所有(all)数据库。
同时修改第 81 行和第 84 行,将本地连接的认证方式由 ident 改为 md5,确保本地使用 JDBC 可以通过 localhost 主机连接到数据库。
上面的配置完成后,切换到 root 用户(可以执行 exit 退出 postgres 用户),然后执行如下指令,重启 PostgreSQL 数据库:

  1. [root@localhost ~]# systemctl restart postgresql-9.6.service
  2. [root@localhost ~]# firewall-cmd --add-service=postgresql
  3. success
  4. [root@localhost ~]# firewall-cmd --add-service=postgresql --permanent
  5. success

第一条指令重启 PostgreSQL 数据库服务,后面两条指令将 PostgreSQL 使用的端口(5432)加入防火墙规则,确保外部应用能够正常连接。
对 Linux 服务和防火墙的相关配置,可参考:CentOS 7 中的服务 - systemdCentOS 7 中的动态防火墙 - firewalld 两篇文档的说明。
完成后,再次使用 psql 命令即可登录到数据库(无论使用 Linux 的 root 用户或 postgres 用户均可):

  1. [root@localhost ~]# psql -U root -h 10.10.2.11 -d root -W
  2. Password for user root:
  3. psql (9.6.1)
  4. Type "help" for help.