暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PostgreSQL数据库的安装与简单使用

叶夜流年 2021-04-29
1600

简介

PostgreSQL 是目前最深受开发人员喜爱的关系型数据库(RDB)之一,其提供了多种扩展数据类型支持,为互联网时代的高效应用开发提供便利。

齐治产品的关系型数据库选用 PostgreSQL,本文将介绍如何在开发用 Linux 环境(CentOS 7)下安装和使用 PostgreSQL。

安装 PostgreSQL

以 root 用户身份执行以下命令即可执行安装操作:

[root@localhost ~]# yum install -y postgresql96-server
......

关于 PostgreSQL 的版本

CentOS 7 自带 PostgreSQL 9.2 版本,可以使用“yum install postgresql-server”安装此版本。如果希望使用最新发布的版本(如本文要求的),则应该使用上面的命令(包名为 postgresqlXX-server,XX为版本号,例如“96”代表 9.6.x 版本)。

使用“yum list | grep postgresql”可以查看当前可以安装哪些和 PostgreSQL 相关的包,注意第一列为包名,第二列为版本,第三列为来源(base/updates 均为 CentOS 自带的安装源,pgdgXX 为 PostgreSQL 组织发布的最新版本安装源)。

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

[root@localhost ~]# usr/pgsql-9.6/bin/postgresql96-setup initdb
Initializing database ... OK
[root@localhost ~]# systemctl enable postgresql-9.6.service
Created symlink from etc/systemd/system/multi-user.target.wants/postgresql-9.6.service to usr/lib/systemd/system/postgresql-9.6.service.
[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 用户,并执行用户和数据库的创建操作:

[root@localhost ~]# su - postgres
Last login: Thu Oct 20 21:58:51 CST 2016 on pts/0
-bash-4.2$ createuser -P yey
Enter password for new role:
Enter it again:
-bash-4.2$ createdb -O yey test
-bash-4.2$ psql
psql (9.9.1)
Type "help" for help.
 
test=# \q
-bash-4.2$

上面的指令中,先使用 su - 切换到 postgres 用户,使用 postgres 用户的环境变量并进入其家目录(/var/lib/pgsql/)。

createuser 指令将创建 PostgreSQL 数据库用户“yey”,-P 参数要求设置该用户的密码,后面两行输入密码和确认密码。

createdb 指令创建名称为“test”的数据库,后续数据将保存到此数据库下。-O 参数指定该数据库的拥有者(Owner)为“yey”用户。

最后,psql 指令可登录进入数据库,由于没有指定任何参数,因此使用缺省用户(postgres)登录进入缺省数据库(postgres),其认证方式为使用操作系统当前用户进行认证,由于当前操作系统用户已经为“postgres”,因此无需输入任何密码,直接可以登录进入。“\q” 指令退出登录,退回到 Bash 提示符状态。

我们新创建用户 yey使用的认证方式为密码认证,当前配置下无法使用 psql 命令登录,接下来我们对数据库进行必要的配置,使可以使用 shterm 用户从本地或远程登录数据库。

如果需要修改数据库用户的密码,可以执行

# su - postgres

-bash-
3.2
$ psql -U postgres

postgres=# alter user postgres with password 
'new password'
;

postgres=# \q


配置 PostgreSQL

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

  • postgresql.conf:PostgreSQL 的通用配置文件。

  • pg_hba.conf:配置客户端连接数据库时的认证方式。

在本节中,我们将做如下简单修改,使用户可以从数据库本机或远程,以新创建的 yey数据库用户登录到 test数据库中。

打开 postgresql.conf 文件,修改 listen_addresses 参数,使其监听所有本机地址,而不仅仅是“localhost”:

postgresql.conf

......

#------------------------------------------------------------------------------

# CONNECTIONS AND AUTHENTICATION

#------------------------------------------------------------------------------

# - Connection Settings -

listen_addresses = 
'*'
                  # what IP address(es) to listen on;

                                        
# comma-separated list of addresses;

                                        
# defaults to 'localhost'; use '*' for all

......

上述配置确保从其他计算机也可以连接到数据库。

打开 pg_hba.conf,到最后几行,增加如下一行配置:

pg_hba.conf

新增 82 行配置,确保从研发网段 10.10.0.0/20 可以使用所有用户以密码认证方式(password 或 md5,前者传递密码明文,后者传递 MD5 摘要,更安全)登录进入所有(all)数据库。同时修改第 81 行和第 84 行,将本地连接的认证方式由  ident 改为 md5,确保本地使用 JDBC 可以通过 localhost 主机连接到数据库。

上面的配置完成后,切换到 root 用户(可以执行 exit 退出 postgres 用户),然后执行如下指令,重启 PostgreSQL 数据库:

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

第一条指令重启 PostgreSQL 数据库服务,后面两条指令将 PostgreSQL 使用的端口(5432)加入防火墙规则,确保外部应用能够正常连接。

对 Linux 服务和防火墙的相关配置,可参考:CentOS 7 中的服务 - systemd 和 CentOS 7 中的动态防火墙 - firewalld 两篇文档的说明。

完成后,再次使用 psql 命令即可登录到数据库(无论使用 Linux 的 root 用户或 postgres 用户均可):

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


文章转载自叶夜流年,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论