第 4 章 使用 PostgreSQL
PostgreSQL 服务器是一个基于 SQL 语言的开源、健壮且高度可扩展的数据库服务器。PostgreSQL 服务器提供了一个对象关系型数据库系统,其可以管理大量的数据集和大量的并发用户。因此,PostgreSQL 服务器可用在集群中,来管理大量的数据。
PostgreSQL 服务器包含确保数据完整性、构建容错环境和应用程序的功能。使用 PostgreSQL 服务器,您可以使用您自己的数据类型、自定义函数或来自不同编程语言的代码来扩展数据库,而无需重新编译数据库。
了解如何在 RHEL 系统上安装和配置 PostgreSQL,如何备份 PostgreSQL 数据,以及如何从早期的 PostgreSQL 版本迁移。
4.1. 安装 PostgreSQL
RHEL 9 提供 PostgreSQL 13 作为此应用程序流的初始版本,您可以轻松地作为 RPM 软件包安装。
在 RHEL 9 的次版本中,其他 PostgreSQL 版本作为模块提供,具有较短的生命周期:
-
RHEL 9.2 引入了 PostgreSQL 15 作为
postgresql:15
模块流 -
RHEL 9.4 引入了 PostgreSQL 16 作为
postgresql:16
模块流
要安装 PostgreSQL,请使用以下流程:
按照设计,无法并行安装同一模块的多个版本(stream)。因此,您必须只从 postgresql
模块中选择一个可用的流。您可以在容器中使用不同版本的 PostgreSQL 数据库服务器,请参阅 在容器中运行多个 PostgreSQL 版本。
流程
安装 PostgreSQL 服务器软件包:
对于 RPM 软件包中的 PostgreSQL 13 :
# dnf install postgresql-server
对于 PostgreSQL 15 或 PostgreSQL 16,通过从
postgresql
模块中选择流(版本)15 或 16,并指定server
配置文件,例如:# dnf module install postgresql:16/server
postgres
超级用户会自动创建。
初始化数据库集群:
# postgresql-setup --initdb
红帽建议将数据存储在默认的
/var/lib/pgsql/data
目录中。启动
postgresql
服务:# systemctl start postgresql.service
启用
postgresql
服务,以便在引导时启动:# systemctl enable postgresql.service
如果要从 RHEL 9 中的早期 postgresql
流升级,请按照 切换到更新的流 和 迁移到 RHEL 9 版本的 PostgreSQL 中描述的流程操作。
4.1.1. 在容器中运行多个 PostgreSQL 版本
要在同一主机上运行不同版本的 PostgreSQL,请在容器中运行它们,因为您无法并行安装同一模块的多个版本(流)。
此流程以 PostgreSQL 13 和 PostgreSQL 15 作为示例,但您可以使用 Red Hat Ecosystem Catalog 中提供的任何 PostgreSQL 容器版本。
先决条件
-
container-tools
元数据包已安装。
流程
使用您的红帽客户门户网站帐户向
registry.redhat.io
注册中心进行身份验证:# podman login registry.redhat.io
如果您已登录到容器注册中心,请跳过这一步。
在容器中运行 PostgreSQL 13 :
$ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database_name> -p <host_port_1>:5432 rhel9/postgresql-13
有关使用此容器镜像用法的更多信息,请参阅 红帽生态系统目录。
在容器中运行 PostgreSQL 15 :
$ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database_name> -p <host_port_2>:5432 rhel9/postgresql-15
有关使用此容器镜像用法的更多信息,请参阅 红帽生态系统目录。
在容器中运行 PostgreSQL 16 :
$ podman run -d --name <container_name> -e POSTGRESQL_USER=<user_name> -e POSTGRESQL_PASSWORD=<password> -e POSTGRESQL_DATABASE=<database_name> -p <host_port_3>:5432 rhel9/postgresql-16
有关使用此容器镜像用法的更多信息,请参阅 红帽生态系统目录。
注意容器名称和两个数据库服务器的主机端口必须不同。
要确保客户端可以访问网络上的数据库服务器,请在防火墙中打开主机端口:
# firewall-cmd --permanent --add-port={<host_port_1>/tcp,<host_port_2>/tcp,<host_port_3>/tcp,...} # firewall-cmd --reload
验证
显示正在运行的容器的信息:
$ podman ps
连接到数据库服务器,并以 root 用户身份登录:
# psql -u postgres -p -h localhost -P <host_port> --protocol tcp
其他资源