帮助中心
如何在CentOS 8上安装PostgreSQL



PostgreSQL或Postgres是一个开源的通用对象关系数据库管理系统,具有许多先进的功能,允许你建立容错的环境或复杂的应用程序。

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

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

前提条件


为了能够安装软件包,你需要以 root 或具有 sudo 权限的用户登录。

在 CentOS 8 上安装 PostgreSQL


在写这篇文章的时候,有两个版本的PostgreSQL服务器可以从标准的CentOS软件库中安装:9.6和10.0版本。

要列出可用的PostgreSQL模块流,请输入:

$ dnf module list postgresql

输出显示 postgresql 模块有两个数据流可用。每个流有两个配置文件:服务器和客户端。带有服务器配置文件的流 10 是默认的。

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 

要安装默认的流,PostgreSQL服务器10.0版的类型:

$ sudo dnf install @postgresql:10

要安装9.6版的PostgreSQL服务器,键入:

$ sudo dnf install @postgresql:9.6 

你可能还想安装contrib包,它为PostgreSQL数据库系统提供了一些额外的功能。

$ sudo dnf install postgresql-contrib

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

$ sudo postgresql-setup initdb
Initializing database ... OK

启动PostgreSQL服务并使其在启动时启动。

$ sudo systemctl enable --now postgresql

使用psql工具通过连接到PostgreSQL数据库服务器来验证安装,并打印其版本。

$ sudo -u postgres psql -c "SELECT version();"
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使用角色的概念处理数据库访问权限。一个角色可以代表一个数据库用户或一个数据库用户组。

PostgreSQL支持多种认证方法。最常用的方法是:

  • 信任 - 只要满足pg_hba.conf中定义的条件,一个角色可以在没有密码的情况下连接。
  • 密码 - 一个角色可以通过提供一个密码来连接。密码可以存储为scram-sha-256、md5和密码(明文)。
  • Ident - 仅在TCP/IP连接上支持。它通过获取客户端的操作系统用户名来工作,并有一个可选的用户名映射。
  • Peer - 与Ident相同,但它只支持本地连接。

PostgreSQL客户端认证在名为pg_hba.conf的配置文件中定义。默认情况下,对于本地连接,PostgreSQL被设置为使用对等认证方法。

当你安装PostgreSQL服务器时,会自动创建postgres用户。这个用户是PostgreSQL实例的超级用户。它等同于MySQL的根用户。

要以postgres用户登录到PostgreSQL服务器,首先切换到该用户,然后使用psql工具访问PostgreSQL提示符:

$ sudo su - postgres$ psql

从这里,你可以与PostgreSQL实例进行交互。要退出PostgreSQL的外壳,请键入。

\q

你也可以在不切换用户的情况下用sudo命令访问PostgreSQL提示符。

$ sudo -u postgres psql

通常情况下,postgres用户只在本地主机上使用。


创建PostgreSQL角色和数据库


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

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

首先,连接到PostgreSQL的外壳。

$ sudo -u postgres psql

使用下面的命令创建一个新的PostgreSQL角色。

CREATE ROLE john;

创建一个新的数据库。

CREATE DATABASE johndb;

通过运行下面的查询,授予用户在数据库上的权限。

GRANT ALL PRIVILEGES ON DATABASE johndb TO john;


启用对PostgreSQL服务器的远程访问


默认情况下,PostgreSQL服务器只监听本地接口127.0.0.1。

要启用对PostgreSQL服务器的远程访问,请打开配置文件。

$ sudo nano /var/lib/pgsql/data/postgresql.conf

向下滚动到 CONNECTIONS AND AUTHENTICATION 部分,添加/编辑以下一行。

/var/lib/pgsql/data/postgresql.conf
#------------------------------------------------------------------------------
# CONNECTIONS AND AUTHENTICATION
#------------------------------------------------------------------------------

# - Connection Settings -

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

保存该文件,然后用以下方法重启PostgreSQL服务。

$ sudo systemctl restart postgresql

用 ss 工具来验证这些变化。

$ ss -nlt | grep 5432
LISTEN   0    128    0.0.0.0:5432    0.0.0.0:*       
LISTEN   0    128    [::]:5432      [::]:*  

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

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

下面是一些显示不同使用情况的例子。

/var/lib/pgsql/data/pg_hba.conf
# 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
购物车