首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在 CentOS 8 上安装 Postgresql

PostgreSQL 或者 Postgres 是一个开源的,多用途的关系型数据库管理系统。它有很多高级特性,可以允许你构建容错的环境或者复杂的应用。

在这篇指南中,我们将会讨论如何在 CentOS 8 上安装 PostgreSQL 数据库服务器。在选择你要安装哪个版本之前,请确认你的应用支持它。

我们将会探索 PostgreSQL 数据库管理的基础知识。

一、 前提条件

为了安装软件包,你需要以 root 或者其他有 sudo 权限的用户身份登录系统。

二、 在 CentOS 8 上安装 Postgresql

在写这篇文章的时候,有两个 PostgreSQL 服务器的版本可用来安装:9.6 和 10.0 。

为了列出可用的 PostgreSQL 模块,请输入:

代码语言:javascript
复制
dnf module list postgresql

输出结果显示,postgresql 有两个版本。每个版本都有两个部分:服务器和客户端。 服务器版本 10,是默认的版本:

代码语言:javascript
复制
CentOS-8 - AppStream
Name          Stream    Profiles              Summary
postgresql    10 [d]    client, server [d]    PostgreSQL server and client module
postgresql    9.6       client, server [d]    PostgreSQL server and client module

01.为了安装默认的版本,PostgreSQL 服务器版本 10.0,输入:

代码语言:javascript
复制
sudo dnf install @postgresql:10

02.为了安装 PostgreSQL 服务器版本 9.6,输入:

代码语言:javascript
复制
sudo dnf install @postgresql:9.6

你可能还想安装 contrib 包,它们给 PostgreSQL 数据库提供一些额外的特性:

代码语言:javascript
复制
sudo dnf install postgresql-contrib

一旦安装完成,使用下面的命令初始化 PostgreSQL 数据库:

代码语言:javascript
复制
sudo postgresql-setup initdb
代码语言:javascript
复制
Initializing database ... OK

启动 PostgreSQL 服务,并且启用开机启动 PostgreSQL 服务。

代码语言:javascript
复制
sudo systemctl enable --now postgresql

使用psql工具连接 PostgreSQL 数据库服务器并且打印它的版本号,以验证安装过程。

代码语言:javascript
复制
sudo -u postgres psql -c "SELECT version();"
代码语言:javascript
复制
PostgreSQL 10.6 on x86_64-redhat-linux-gnu, compiled by gcc (GCC) 8.2.1 20180905 (Red Hat 8.2.1-3), 64-bit

三、PostgreSQL 角色和身份认证方法

PostgreSQL 支持多种身份认证方法。最常用的方法如下:

  • Trust - 只要满足pg_hba.conf定义的条件,一个角色就可以不使用密码就能连接服务器
  • Password - 通过密码,一个角色可以连接服务器。密码可以被存储为 scram-sha-256, md5, 和 password(明文)。
  • Ident - 仅仅支持 TCP/IP 连接。它通常通过一个可选的用户名映射表,获取客户端操作系统用户名。
  • Peer - 和 Ident 一样,仅仅支持本地连接。

PostgreSQL 客户端身份验证通常被定义在pg_hba.conf文件中。默认情况下,对于本地连接,PostgreSQL 被设置成身份认证防范 peer。

为了以postgres用户身份登录 PostgreSQL 服务器,首先切换用户,然后使用psql工具访问 PostgreSQL。

代码语言:javascript
复制
sudo su - postgres
psql

从这里开始,你可以与 PostgreSQL 实例交互。退出 PostgreSQL Shell,输入:

代码语言:javascript
复制
\q

你也可以不切换用户,而使用sudo命令访问 PostgreSQL:

代码语言:javascript
复制
sudo -u postgres psql

通常,postgres用户仅仅在本地被使用。

四、创建 PostgreSQL 角色和数据库

仅仅超级用户和拥有CREATEROLE权限的角色可以创建新角色。

在下面的例子中,我们创建一个名称为john的角色,一个名称为johndb的数据库,并且授予数据库上的权限

01.首先,连接到 PostgreSQL shell:

代码语言:javascript
复制
sudo -u postgres psql

02.通过下面的命令,创建一个新的 PostgreSQL 角色:

代码语言:javascript
复制
create role john;

03.创建一个新的数据库:

代码语言:javascript
复制
create database johndb;

04.通过下面的查询语句,授予用户在数据库上的所有权限。

代码语言:javascript
复制
grant all privileges on database johndb to john;

五、启用远程访问 PostgreSQL 服务器

默认情况下,PostgreSQL 服务器仅仅监听本地网络接口:127.0.0.1

为了允许远程访问你的 PostgreSQL 服务器,打开配置文件:

代码语言:javascript
复制
sudo nano /var/lib/pgsql/data/postgresql.conf

往下滑动到CONNECTIONS AND AUTHENTICATION部分,并且添加或者编辑下面的行:

代码语言:javascript
复制
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

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

保存文件,并且使用下面的命令重启 PostgreSQL 服务:

代码语言:javascript
复制
sudo systemctl restart postgresql

使用ss工具来验证这个修改:

代码语言:javascript
复制
ss -nlt | grep 5432
代码语言:javascript
复制
LISTEN   0    128    0.0.0.0:5432    0.0.0.0:*
LISTEN   0    128    [::]:5432      [::]:*

上面的输出显示 PostgreSQL 服务器已经在监听所有网络接口(0.0.0.0)的默认端口。

最后一步是,通过编辑pg_hba.conf文件,配置服务器去接受远程连接。

下面是一些例子,展示了不同的用户示例:

代码语言:javascript
复制
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# The user jane can access all databases from all locations using an md5 password
host    all             jane            0.0.0.0/0                md5

# The user jane can access only the janedb database from all locations using an md5 password
host    janedb          jane            0.0.0.0/0                md5

# The user jane can access all databases from a trusted location (192.168.1.134) without a password
host    all             jane            192.168.1.134            trust

六、总结

CentOS 8 提供了两种 PostgreSQL 版本:9.6 和 10.0。

获取更多关于这个主题的信息,请浏览:PostgreSQL 官方文档

下一篇
举报
领券