外观
PostgreSQL 包管理器安装
Debian/Ubuntu 系统安装
Debian 和 Ubuntu 是最常用的 Linux 发行版之一,PostgreSQL 官方提供了针对这些系统的专门仓库,支持多种版本的安装。
支持的版本
- Debian:9(Stretch)、10(Buster)、11(Bullseye)、12(Bookworm)
- Ubuntu:18.04(Bionic)、20.04(Focal)、22.04(Jammy)、24.04(Noble)
使用官方 PostgreSQL 仓库
PostgreSQL 官方仓库提供了最新版本的 PostgreSQL,推荐使用官方仓库进行安装,以获得最新的功能和安全更新。
- 添加 PostgreSQL 仓库密钥:
首先需要下载并安装 PostgreSQL 官方仓库的 GPG 密钥,以验证包的完整性和真实性。
bash
# 下载并安装仓库密钥
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -- 添加 PostgreSQL 仓库:
根据您的 Debian 或 Ubuntu 版本,添加相应的 PostgreSQL 仓库。官方仓库包含了所有支持的 PostgreSQL 版本。
bash
# Debian 12 (Bookworm)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ bookworm-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# Debian 11 (Bullseye)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ bullseye-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# Ubuntu 24.04 (Noble)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# Ubuntu 22.04 (Jammy)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ jammy-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
# Ubuntu 20.04 (Focal)
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ focal-pgdg main" > /etc/apt/sources.list.d/pgdg.list'- 更新包列表:
添加仓库后,需要更新系统的包列表,以获取 PostgreSQL 相关的包信息。
bash
sudo apt update- 安装 PostgreSQL:
可以根据需要安装最新版本的 PostgreSQL,或者指定特定版本。同时,还可以安装客户端工具和开发库。
bash
# 安装最新版本
sudo apt install postgresql
# 安装特定版本(如16)
sudo apt install postgresql-16
# 安装客户端工具
sudo apt install postgresql-client-16
# 安装开发库
sudo apt install libpq-dev使用系统默认仓库
如果您不需要最新版本的 PostgreSQL,也可以使用系统默认仓库中的版本。默认仓库中的版本通常比较稳定,但可能不是最新的。
bash
# 更新包列表
sudo apt update
# 安装默认版本
sudo apt install postgresql postgresql-client验证安装
安装完成后,需要验证 PostgreSQL 是否成功安装并正常运行。可以通过检查服务状态、版本信息和连接测试来验证。
bash
# 检查PostgreSQL服务状态
sudo systemctl status postgresql
# 检查PostgreSQL版本
psql --version
# 连接到PostgreSQL
sudo -u postgres psqlRHEL/CentOS 系统安装
Red Hat Enterprise Linux (RHEL) 和 CentOS 是企业环境中常用的 Linux 发行版,PostgreSQL 官方同样提供了专门的仓库支持。
支持的版本
- RHEL/CentOS:7、8、9
- Rocky Linux:8、9
- AlmaLinux:8、9
使用官方 PostgreSQL 仓库
对于 RHEL/CentOS 及其衍生版本,推荐使用 PostgreSQL 官方仓库进行安装,以获得最新的版本和长期支持。
- 安装 PostgreSQL 仓库:
首先需要安装 PostgreSQL 官方仓库,根据不同的系统版本选择对应的仓库包。
bash
# RHEL/CentOS/Rocky Linux/AlmaLinux 9
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-9-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# RHEL/CentOS/Rocky Linux/AlmaLinux 8
sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# RHEL/CentOS 7
sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm- 禁用内置 PostgreSQL 模块(RHEL 8+):
在 RHEL 8 及以上版本中,系统默认提供了 PostgreSQL 模块,需要先禁用该模块,然后才能安装官方仓库中的版本。
bash
sudo dnf module disable -y postgresql- 安装 PostgreSQL:
根据系统版本选择合适的安装命令,这里以 PostgreSQL 16 为例。在 RHEL 7 上使用 yum,在 RHEL 8+ 上使用 dnf。
bash
# RHEL 9/CentOS 9/Rocky Linux 9/AlmaLinux 9
sudo dnf install -y postgresql16-server postgresql16-contrib
# RHEL 8/CentOS 8/Rocky Linux 8/AlmaLinux 8
sudo dnf install -y postgresql16-server postgresql16-contrib
# RHEL 7/CentOS 7
sudo yum install -y postgresql16-server postgresql16-contrib- 初始化数据库集群:
安装完成后,需要初始化 PostgreSQL 数据库集群,创建必要的目录结构和配置文件。
bash
# RHEL 9/CentOS 9/Rocky Linux 9/AlmaLinux 9
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
# RHEL 8/CentOS 8/Rocky Linux 8/AlmaLinux 8
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
# RHEL 7/CentOS 7
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb- 启动并启用服务:
初始化完成后,需要启动 PostgreSQL 服务,并设置为开机自启,确保系统重启后 PostgreSQL 能自动运行。
bash
# RHEL 9/CentOS 9/Rocky Linux 9/AlmaLinux 9
sudo systemctl enable postgresql-16 --now
# RHEL 8/CentOS 8/Rocky Linux 8/AlmaLinux 8
sudo systemctl enable postgresql-16 --now
# RHEL 7/CentOS 7
sudo systemctl enable postgresql-16 --now使用系统默认仓库
如果您不需要最新版本的 PostgreSQL,也可以使用系统默认仓库中的版本。默认仓库中的版本经过系统厂商的测试,稳定性较高,但版本可能较旧。
bash
# RHEL 9/CentOS 9/Rocky Linux 9/AlmaLinux 9
sudo dnf install -y postgresql-server postgresql-contrib
# RHEL 8/CentOS 8/Rocky Linux 8/AlmaLinux 8
sudo dnf install -y postgresql-server postgresql-contrib
# RHEL 7/CentOS 7
sudo yum install -y postgresql-server postgresql-contrib
# 初始化数据库集群
sudo postgresql-setup initdb
# 启动并启用服务
sudo systemctl enable postgresql --now验证安装
安装完成后,需要验证 PostgreSQL 是否正常运行。可以通过检查服务状态、版本信息和连接测试来确认。
bash
# 检查PostgreSQL服务状态
sudo systemctl status postgresql-16
# 检查PostgreSQL版本
psql --version
# 连接到PostgreSQL
sudo -u postgres psqlSUSE/openSUSE 系统安装
SUSE Linux Enterprise Server (SLES) 和 openSUSE 是另一个常见的 Linux 发行版系列,PostgreSQL 官方也提供了专门的仓库支持。
支持的版本
- openSUSE Leap:15.x(稳定版本,每12个月更新一次)
- openSUSE Tumbleweed:滚动更新版(持续接收最新更新)
安装步骤
对于 SUSE/openSUSE 系统,安装 PostgreSQL 的步骤与其他 Linux 发行版类似,主要包括添加仓库、安装软件包、初始化集群和启动服务。
- 添加 PostgreSQL 仓库:
首先需要添加 PostgreSQL 官方仓库,根据不同的 openSUSE 版本选择对应的仓库地址。
bash
# openSUSE Leap 15.x
sudo zypper addrepo https://download.postgresql.org/pub/repos/zypp/repo/pgdg-sles15-pg16.repo
# openSUSE Tumbleweed
sudo zypper addrepo https://download.postgresql.org/pub/repos/zypp/repo/pgdg-tumbleweed-pg16.repo- 安装 PostgreSQL:
使用 zypper 包管理器安装 PostgreSQL 服务器和相关组件。
bash
sudo zypper install postgresql16-server postgresql16-contrib- 初始化数据库集群:
安装完成后,需要初始化 PostgreSQL 数据库集群。
bash
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb- 启动并启用服务:
初始化完成后,启动 PostgreSQL 服务并设置为开机自启。
bash
sudo systemctl enable postgresql-16 --now- 验证安装:
安装完成后,验证 PostgreSQL 是否正常运行。
bash
psql --version
sudo -u postgres psql配置 PostgreSQL
安装完成后,需要对 PostgreSQL 进行基本配置,包括修改监听地址、配置客户端认证和设置管理员密码等。
修改监听地址
默认情况下,PostgreSQL 只监听本地回环地址(localhost),这意味着只能从本机访问数据库。如果需要从其他机器访问 PostgreSQL,需要修改监听地址。
- 编辑 postgresql.conf:
首先需要编辑 PostgreSQL 的主要配置文件 postgresql.conf,修改监听地址设置。
bash
# 对于PostgreSQL 16
sudo vi /var/lib/pgsql/16/data/postgresql.conf
# 对于默认版本
sudo vi /var/lib/pgsql/data/postgresql.conf- 修改监听地址:
在配置文件中找到 listen_addresses 参数,将其值从 localhost 改为 *,表示监听所有可用的网络接口。
txt
# 将监听地址从localhost改为*
listen_addresses = '*'- 重启服务:
修改配置后,需要重启 PostgreSQL 服务才能使更改生效。
bash
sudo systemctl restart postgresql-16配置客户端认证
PostgreSQL 使用 pg_hba.conf 文件来控制客户端的访问认证。默认情况下,只允许本地用户通过信任方式连接。如果需要从其他机器连接,需要修改认证规则。
- 编辑 pg_hba.conf:
首先需要编辑 pg_hba.conf 文件,添加或修改客户端认证规则。
bash
# 对于PostgreSQL 16
sudo vi /var/lib/pgsql/16/data/pg_hba.conf
# 对于默认版本
sudo vi /var/lib/pgsql/data/pg_hba.conf- 添加客户端认证规则:
在配置文件中添加或修改客户端认证规则,允许特定 IP 地址或 IP 段使用密码认证连接到 PostgreSQL。
txt
# 允许所有IP地址使用密码认证
host all all 0.0.0.0/0 scram-sha-256
host all all ::/0 scram-sha-256
# 允许特定IP段使用密码认证
host all all 192.168.1.0/24 scram-sha-256- 重启服务:
修改认证规则后,需要重启 PostgreSQL 服务才能使更改生效。
bash
sudo systemctl restart postgresql-16设置 postgres 用户密码
postgres 用户是 PostgreSQL 数据库的超级用户,默认情况下没有密码(或使用 ident 认证)。为了安全起见,应该为 postgres 用户设置一个强密码。
bash
# 连接到PostgreSQL
sudo -u postgres psql
# 设置密码
ALTER USER postgres WITH PASSWORD 'your_secure_password';
# 退出
\q安装多个 PostgreSQL 版本
在某些情况下,您可能需要在同一台服务器上安装多个 PostgreSQL 版本,例如进行版本升级测试、应用兼容性测试或同时运行不同版本的应用程序。
Debian/Ubuntu 系统
在 Debian/Ubuntu 系统上,PostgreSQL 的不同版本可以并行安装,每个版本使用不同的服务名称和端口号。
bash
# 安装PostgreSQL 15和16
sudo apt install postgresql-15 postgresql-16
# 安装对应的客户端工具
sudo apt install postgresql-client-15 postgresql-client-16
# 查看所有PostgreSQL服务
sudo systemctl list-units --type=service | grep postgresql
# 启动特定版本
sudo systemctl start postgresql@15-main
sudo systemctl start postgresql@16-main
# 连接到特定版本
psql -h localhost -p 5432 -U postgres # PostgreSQL 15
psql -h localhost -p 5433 -U postgres # PostgreSQL 16RHEL/CentOS 系统
在 RHEL/CentOS 系统上,多个 PostgreSQL 版本也可以并行安装,但需要手动调整端口号以避免冲突。
bash
# 安装PostgreSQL 15和16
sudo dnf install postgresql15-server postgresql16-server
# 初始化两个版本的数据库集群
sudo /usr/pgsql-15/bin/postgresql-15-setup initdb
sudo /usr/pgsql-16/bin/postgresql-16-setup initdb
# 修改PostgreSQL 15的端口为5432
sudo vi /var/lib/pgsql/15/data/postgresql.conf
# port = 5432
# 修改PostgreSQL 16的端口为5433
sudo vi /var/lib/pgsql/16/data/postgresql.conf
# port = 5433
# 启动并启用两个版本
sudo systemctl enable postgresql-15 --now
sudo systemctl enable postgresql-16 --now
# 连接到特定版本
psql -h localhost -p 5432 -U postgres # PostgreSQL 15
psql -h localhost -p 5433 -U postgres # PostgreSQL 16包管理器安装的优势与劣势
使用包管理器安装 PostgreSQL 有其明显的优势和劣势,了解这些优缺点可以帮助您做出更合适的安装选择。
优势
- 安装简单:通过包管理器可以实现一键安装,无需手动编译源代码,大大简化了安装过程,特别适合初学者和快速部署场景。
- 自动依赖管理:包管理器会自动处理 PostgreSQL 所需的所有依赖关系,确保所有必要的库和工具都被正确安装。
- 版本管理:支持在同一台服务器上安装多个 PostgreSQL 版本,方便进行版本升级测试、应用兼容性测试和迁移工作。
- 自动更新:通过包管理器可以轻松更新到最新版本,确保系统始终使用最新的安全补丁和功能改进。
- 标准化配置:遵循系统的标准配置和服务管理方式,与系统的其他服务保持一致,便于统一管理和维护。
- 社区支持:有大量的文档和社区支持,遇到问题时可以更容易地找到解决方案和帮助。
劣势
- 版本滞后:系统默认仓库的 PostgreSQL 版本可能滞后于官方发布的最新版本,无法及时获取最新功能。
- 配置灵活性:配置选项可能受到包管理器的限制,无法完全按照自己的需求进行定制。
- 自定义编译选项:无法使用自定义的编译选项来优化 PostgreSQL 的性能或功能。
- 数据目录固定:数据目录位置通常是固定的,无法根据需要灵活调整。
- 升级限制:跨版本升级可能需要手动操作,无法完全自动化,增加了升级的复杂性和风险。
版本选择建议
选择合适的 PostgreSQL 版本对于系统的稳定性、性能和安全性至关重要。不同的环境和需求可能需要不同的版本选择策略。
生产环境
在生产环境中,稳定性和可靠性是最重要的考虑因素,因此应该选择成熟、稳定且长期支持的版本。
- 推荐版本:PostgreSQL 14、15或16。这些版本都处于长期支持阶段,拥有良好的稳定性和安全性。
- 支持期限:PostgreSQL 14支持到2026年11月,PostgreSQL 15支持到2027年11月,PostgreSQL 16支持到2028年11月。选择支持期限较长的版本可以减少频繁升级带来的风险和工作量。
- 稳定性:建议选择发布至少6个月以上的版本,确保主要bug已修复,系统运行稳定。
- 兼容性:在选择版本之前,应该确保应用程序与所选版本兼容,特别是对于使用了特定特性或扩展的应用程序。
开发环境
在开发环境中,可以更加灵活地选择 PostgreSQL 版本,以满足开发和测试需求。
- 推荐版本:可以使用最新稳定版或与生产环境相同的版本。使用最新稳定版可以提前体验新特性,而使用与生产环境相同的版本可以确保开发和测试环境的一致性。
- 测试新特性:对于需要测试新特性的开发工作,可以使用beta版本或预览版,但不建议在生产环境中使用这些版本。
- 多版本测试:建议在不同版本的 PostgreSQL 上测试应用程序兼容性,确保应用程序能够在不同版本上正常运行,便于后续的版本升级和迁移。
常见问题(FAQ)
Q1: 如何查看已安装的PostgreSQL版本?
A1: 可以使用以下命令查看已安装的PostgreSQL版本:
bash
psql --versionQ2: 如何切换默认的PostgreSQL版本?
A2: 在Debian/Ubuntu系统上,可以使用update-alternatives命令切换默认版本:
bash
sudo update-alternatives --config pgsql-psql
sudo update-alternatives --config pgsql-pg_dumpQ3: 如何卸载PostgreSQL?
A3: 可以使用包管理器卸载PostgreSQL:
bash
# Debian/Ubuntu
sudo apt purge postgresql-16 postgresql-client-16
# RHEL/CentOS
sudo dnf remove postgresql16-server postgresql16-contrib
# 删除数据目录
sudo rm -rf /var/lib/pgsql/16Q4: 如何升级PostgreSQL版本?
A4: 跨版本升级建议使用pg_upgrade工具:
bash
# 安装新版本
sudo apt install postgresql-16
# 初始化新版本集群
sudo /usr/lib/postgresql/16/bin/initdb -D /var/lib/postgresql/16/main
# 停止两个版本的服务
sudo systemctl stop postgresql-15 postgresql-16
# 使用pg_upgrade升级
sudo -u postgres /usr/lib/postgresql/16/bin/pg_upgrade \
-b /usr/lib/postgresql/15/bin \
-B /usr/lib/postgresql/16/bin \
-d /var/lib/postgresql/15/main \
-D /var/lib/postgresql/16/main
# 启动新版本
sudo systemctl start postgresql-16Q5: 如何安装特定版本的PostgreSQL?
A5: 在安装命令中指定版本号:
bash
# Debian/Ubuntu
sudo apt install postgresql-16
# RHEL/CentOS
sudo dnf install postgresql16-serverQ6: 如何查看PostgreSQL服务状态?
A6: 使用systemctl命令查看服务状态:
bash
sudo systemctl status postgresql-16Q7: 如何修改PostgreSQL的数据目录?
A7: 修改数据目录需要重新初始化数据库集群:
bash
# 停止服务
sudo systemctl stop postgresql-16
# 复制数据目录
sudo cp -a /var/lib/pgsql/16/data /new/data/path
# 修改postgresql.service文件
sudo vi /usr/lib/systemd/system/postgresql-16.service
# 修改Environment=PGDATA=/var/lib/pgsql/16/data为新路径
# 重新加载systemd配置
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start postgresql-16Q8: 如何配置PostgreSQL允许远程连接?
A8: 需要修改两个配置文件:
- 在postgresql.conf中修改listen_addresses = '*'
- 在pg_hba.conf中添加允许远程连接的规则
- 重启PostgreSQL服务
Q9: 如何检查PostgreSQL的日志文件?
A9: 日志文件通常位于:
bash
# 对于PostgreSQL 16
/var/lib/pgsql/16/data/log
# 对于默认版本
/var/lib/pgsql/data/log
# 也可以通过journalctl查看
sudo journalctl -u postgresql-16Q10: 如何设置PostgreSQL的自动启动?
A10: 使用systemctl enable命令设置自动启动:
bash
sudo systemctl enable postgresql-16