PostgreSQL 或 Postgres 是一种开源通用对象关系数据库管理系统,具有许多高级功能,允许您构建容错环境或复杂的应用程序。
在本指南中,我们将讨论如何在 CentOS 8 上安装 PostgreSQL 数据库服务器。在选择安装哪个版本之前,请确保您的应用程序支持它。
我们还将探讨 PostgreSQL 数据库管理的基础知识。
先决条件#
为了能够安装软件包,您需要以 root 或用户身份登录须藤权限
.
在 CentOS 8 上安装 PostgreSQL#
在撰写本文时,标准 CentOS 存储库有两个版本的 PostgreSQL 服务器可供安装:版本 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
-
要安装 PostgreSQL 服务器版本 9.6,请输入:
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
Use the psql
工具通过连接到 PostgreSQL 数据库服务器来验证安装并打印其version
:
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
, and password
(明文)。
- Ident - 仅在 TCP/IP 连接上受支持。它的工作原理是获取客户端的操作系统用户名以及可选的用户名映射。
- 对等 - 与 Ident 相同,但仅在本地连接上受支持。
PostgreSQL 客户端身份验证在名为的配置文件中定义pg_hba.conf
。默认情况下,对于本地连接,PostgreSQL 设置为使用对等身份验证方法。
The postgres
用户是在安装 PostgreSQL 服务器时自动创建的。该用户是 PostgreSQL 实例的超级用户。相当于MySQL root用户。
以以下身份登录 PostgreSQL 服务器postgres
用户,第一切换到用户然后使用以下命令访问 PostgreSQL 提示符psql
公用事业:
sudo su - postgres
psql
从这里,您可以与 PostgreSQL 实例交互。要退出 PostgreSQL shell,请键入:
\q
您还可以使用以下命令访问 PostgreSQL 提示符而无需切换用户sudo命令:
sudo -u postgres psql
通常情况下postgres
用户只能从本地主机使用。
创建 PostgreSQL 角色和数据库#
仅具有以下权限的超级用户和角色CREATEROLE
特权可以创建新角色。
在以下示例中,我们将创建一个名为的新角色john
,一个名为johndb
,并授予数据库权限。
-
首先,连接到 PostgreSQL shell:
sudo -u postgres psql
-
使用以下命令创建新的 PostgreSQL 角色:
-
创建一个新数据库:
-
通过运行以下查询向用户授予数据库权限:
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
file.
以下是一些显示不同用例的示例:
/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 文档
如果您遇到问题或有反馈,请在下面发表评论。