资讯动态

PostgreSQL笔记6:三种主流安装方式详解(RPM / YUM / 源码编译)

发布时间:2026/8/17 1:47:07 来源:尧图企业网站定制
概述在上一章节中我们介绍了 PostgreSQL 的发展历史、核心优势及背景信息。从本章开始我们将正式进入实操环节。作为接触 PostgreSQL 的第一步基础安装部署是后续所有运维与开发工作的前提。PostgreSQL 提供了多种安装方式主要包括RPM 离线安装、YUM 在线安装和源码编译安装。不同方式适用于不同场景生产环境通常要求稳定可控开发调试追求便捷高效而深度定制与内核研究则需要最底层的灵活性。本文将围绕这三种方式展开逐一讲解其操作流程、适用场景及关键技术要点。纲要PostgreSQL 安装方式概述RPM 离线安装核心 RPM 包说明libs、client、server、contrib、devel、docs安装顺序与依赖处理环境变量配置PATH、LD_LIBRARY_PATHYUM 在线安装仓库配置与一键安装适用场景分析源码编译安装依赖包安装flex、bison、readline-devel、zlib-devel等configure编译选项--prefix、--enable-debug、--with-openssl等编译与安装make、make install源码安装的优势与适用场景数据库集群初始化initdb核心参数解析-D、-k、-u、-E、-A数据页校验和data page checksums的性能影响数据目录权限0700服务启动与连接验证pg_ctl、psql使用 GDB 调试 PostgreSQL 源码进阶API 速览Demo 简单示例官方文档与参考链接总结RPM 离线安装RPM 离线安装是企业级生产环境中最常见、最推荐的安装方式。许多生产环境不允许直接联网因此需要通过预先下载的 RPM 包进行离线部署。此外RPM 方式能够对安装包的版本、扩展和依赖进行精确控制。下载 RPM 包以 PostgreSQL 18原文示例为 18以下统一使用 18 作为版本号为例访问 PostgreSQL 官方下载页面https://www.postgresql.org/download/选择 Linux 操作系统并进入direct RPM download页面。根据系统发行版如 Rocky Linux 8和架构选择对应的 PostgreSQL 18 RPM 包列表。以下是必须安装的核心 RPM 包RPM 包说明必要性postgresql18-libs共享库文件通常被其他包自动依赖安装必须postgresql18-client客户端工具及基础库包含psql等不含服务端必须postgresql18-server服务端二进制文件、初始化工具initdb、启动脚本及pg_ctl控制工具必须postgresql18-contribcontrib目录下的官方扩展模块如pg_stat_statements、pgcrypto、hstore等强烈推荐此外以下 RPM 包为推荐安装RPM 包说明postgresql18-develC 语言客户端库与头文件编译第三方扩展如TimescaleDB、Citus时必需postgresql18-docsHTML 格式的官方文档便于本地浏览安装顺序离线安装时需严格按照依赖顺序执行。以下演示基于 Rocky Linux 8 全新环境# 安装基础工具用于上传文件sudodnfinstall-ylrzsz# 按顺序安装 RPM 包sudorpm-ivhpostgresql18-libs-*.rpmsudorpm-ivhpostgresql18-client-*.rpmsudorpm-ivhpostgresql18-server-*.rpmsudorpm-ivhpostgresql18-contrib-*.rpm若安装顺序错误例如先装server再装libs将会提示依赖缺失错误sudorpm-ivhpostgresql18-server-*.rpm# error: Failed dependencies: postgresql18-libs is needed by ...安装目录与用户RPM 安装完成后PostgreSQL 文件默认位于/usr/pgsql-18/目录下包含bin、lib、share等子目录。安装过程会自动创建postgres系统用户。环境变量配置为方便使用需将 PostgreSQL 的bin目录加入PATH并将库目录加入LD_LIBRARY_PATHexportPATH/usr/pgsql-18/bin:$PATHexportLD_LIBRARY_PATH/usr/pgsql-18/lib:$LD_LIBRARY_PATHsource~/.bashrc验证安装是否成功whichpsql# /usr/pgsql-18/bin/psqlpsql--version# psql (PostgreSQL) 18.0YUM 在线安装YUM 在线安装是最简便的方式适用于开发环境、测试环境以及网络条件良好的场景。YUM 会自动处理所有依赖关系无需手动下载和排序 RPM 包。配置 YUM 仓库访问 PostgreSQL 官方 YUM 仓库页面https://www.postgresql.org/download/linux/redhat/根据操作系统版本和架构选择对应的仓库 RPM 包。以 Rocky Linux 8 为例# 安装 PostgreSQL YUM 仓库sudoyuminstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装 PostgreSQL 18sudoyuminstall-ypostgresql18-server postgresql18-contribYUM 的一大优势是自动处理依赖只需确保网络环境畅通即可完成安装。但需要注意的是YUM 方式需要联网且在某些网络环境下下载速度可能较慢。源码编译安装源码编译安装是最灵活、最底层的安装方式适用于以下场景需要深入研究 PostgreSQL 内核源代码需要启用默认未开启的编译选项如调试符号、断言需要定制编译时参数如数据块大小--with-blocksize需要开发或调试第三方插件下载源码包从 PostgreSQL 官方源码下载页面获取源码包# 下载 PostgreSQL 18 源码包wgethttps://ftp.postgresql.org/pub/source/v18.0/postgresql-18.0.tar.gztar-xzfpostgresql-18.0.tar.gzcdpostgresql-18.0安装编译依赖源码编译需要提前安装一系列依赖包。以 Rocky Linux 8 / RHEL 系列为例# Rocky Linux 8 / RHEL 系列sudodnf groupinstall-yDevelopment Toolssudodnfinstall-ygcc gcc-cmakereadline-devel zlib-devel\openssl-devel pam-devel libxml2-devel libxslt-devel\systemd-devel flex bison以 Ubuntu / Debian 系列为例sudoapt-getupdatesudoapt-getinstall-ybuild-essential libreadline-dev zlib1g-dev\flex bison libxml2-dev libxslt-dev libssl-dev\libxml2-utils xsltproc ccache pkg-config其中flex和bison是词法分析和语法分析工具PostgreSQL 借助它们对 SQL 语句进行解析。若环境中缺少这两个工具编译过程将失败。配置编译选项configureconfigure脚本用于检测系统环境并生成 Makefile。常用选项如下选项说明--prefixPREFIX指定安装目录如/usr/pgsql-18--enable-debug编译时加入调试符号-g便于 GDB 调试--with-openssl启用 OpenSSL 支持--with-perl启用 PL/Perl 支持--with-python启用 PL/Python 支持--with-blocksizeBLOCKSIZE设置数据块大小单位 KB默认 8KB以下为最小化配置示例./configure--prefix/usr/pgsql-18 --enable-debug执行configure时脚本会逐一检查依赖项。若某项依赖缺失会在输出中明确提示checking for ... no需根据提示补充安装对应依赖包。编译与安装# 并行编译利用多核 CPUmake-j$(nproc)# 安装makeinstall编译完成后安装目录结构如下/usr/pgsql-18 ├── bin # 可执行文件initdb, pg_ctl, psql, postgres 等 ├── include # 头文件编译扩展时必需 ├── lib # 共享库 └── share # 共享文档与配置文件与 RPM 安装相比源码安装默认包含include目录头文件因此编译第三方扩展时无需额外安装-devel包。创建 postgres 用户源码安装不会自动创建postgres用户需手动操作sudouseraddpostgres数据库集群初始化initdb无论采用何种安装方式安装完成后都需要使用initdb初始化数据库集群。initdb会创建数据目录、生成共享系统表并建立template1数据库。核心参数参数说明-D, --pgdataDIRECTORY指定数据目录位置-k, --data-checksums启用数据页校验和data page checksums-E, --encodingENCODING设置默认编码如UTF8-u, --usernameNAME指定超级用户名默认postgres-A, --authMETHOD指定默认认证方式如scram-sha-256、trust-U, --superuserNAME指定超级用户名同-u数据页校验和-k 参数-k参数用于启用数据页校验和data page checksums。开启后PostgreSQL 在每次读取数据页时会计算校验和并与存储值比对从而检测磁盘静默损坏silent corruption。根据社区评测开启校验和会带来约3%5%的性能损耗但对于生产环境而言这一代价是值得的因为它能有效预防数据静默损坏带来的灾难性后果。数据目录权限initdb要求数据目录权限为0700即仅属主可读写执行。PostgreSQL 11 及以上版本也支持0750属主和同组用户可读写执行。若权限不符合要求initdb或服务启动时会报错FATAL: data directory has group or world access;permissions should beurwx(0700)初始化示例以下为使用postgres用户执行初始化的完整示例# 切换到 postgres 用户sudosu- postgres# 创建数据目录确保权限为 0700mkdir-p/var/lib/pgsql/18/datachmod0700 /var/lib/pgsql/18/data# 执行初始化initdb-D/var/lib/pgsql/18/data\-k\-EUTF8\-Upostgres\-Ascram-sha-256服务启动与连接验证使用pg_ctl工具启动数据库服务pg_ctl-D/var/lib/pgsql/18/data-llogfile start使用psql客户端连接验证psql-Upostgres-dpostgres-hlocalhost-p5432连接成功后可执行简单查询SELECTversion();-- PostgreSQL 18.0 on x86_64-pc-linux-gnu, compiled by gcc ...使用 GDB 调试 PostgreSQL 源码进阶源码编译安装的一大优势是支持使用 GDB 进行运行时调试。这对于内核开发、问题定位和性能分析尤为重要。调试步骤获取目标进程 PIDpsaux|greppostgres附加 GDB 调试gdb-pPID设置断点与继续执行在 GDB 中可设置断点、单步执行、查看调用栈等(gdb) b exec_simple_query (gdb) c触发调试场景在另一个会话中执行 SQLGDB 会在断点处暂停CREATETABLEtest(idINTPRIMARYKEY);INSERTINTOtestVALUES(1);-- 再次插入相同值触发唯一约束冲突INSERTINTOtestVALUES(1);查看调用栈(gdb) bt # 显示完整的函数调用栈定位错误发生位置\errverbose是psql的一个元命令执行后可以显示最近错误的详细信息包括错误发生所在的源代码文件和行号配合 GDB 可快速定位问题代码。API 速览initdb所属库PostgreSQL 服务端工具bin/initdb方法签名initdb[OPTION]...[--pgdata|-D]DATADIR核心参数参数类型说明-D DIRECTORYstring数据目录路径-kflag启用数据页校验和-E ENCODINGstring默认编码如UTF8-U NAMEstring超级用户名-A METHODstring认证方式trust、scram-sha-256、md5等-gflag允许同组用户访问数据目录权限0750返回值无成功时创建数据目录并初始化系统表失败时返回非零退出码示例initdb-D/var/lib/pgsql/data-k-EUTF8-Upostgres-Ascram-sha-256pg_ctl所属库PostgreSQL 服务端工具bin/pg_ctl方法签名pg_ctl-DDATADIR[start|stop|restart|reload|status][OPTION]...核心参数参数类型说明-D DIRECTORYstring数据目录路径-l FILENAMEstring日志输出文件-wflag等待操作完成-t SECONDSinteger等待超时时间秒示例pg_ctl-D/var/lib/pgsql/data start-l/var/log/postgresql.log pg_ctl-D/var/lib/pgsql/data stop-mfastpsql所属库PostgreSQL 客户端工具bin/psql方法签名psql[OPTION]...[DBNAME[USERNAME]]核心参数参数类型说明-h HOSTstring数据库主机地址-p PORTinteger数据库端口默认 5432-U USERNAMEstring连接用户名-d DBNAMEstring数据库名-c COMMANDstring执行单条 SQL 命令后退出示例psql-hlocalhost-p5432-Upostgres-dpostgres-cSELECT version();GDBGNU Debugger所属库GNU 调试工具系统级工具常用命令命令说明gdb -p PID附加到指定进程b FUNCTION在函数入口设置断点c继续执行n单步执行不进入函数内部s单步执行进入函数内部bt打印调用栈p VARIABLE打印变量值q退出 GDB示例gdb-p12345(gdb)b exec_simple_query(gdb)cDemo 简单示例以下 Demo 演示了在 Rocky Linux 8 环境下通过 RPM 方式安装 PostgreSQL 18、初始化数据库集群并启动服务的完整流程。运行说明环境准备Rocky Linux 8 最小化安装具备sudo权限。RPM 包准备从 PostgreSQL 官方 YUM 仓库下载所需的 RPM 包或通过联网环境预先下载。执行脚本按顺序执行以下命令。完整代码#!/bin/bash# PostgreSQL 18 RPM 安装与初始化 Demo# 适用版本PostgreSQL 18# 操作系统Rocky Linux 8 / RHEL 8set-eecho 1. 安装基础工具 sudodnfinstall-ylrzszwgetecho 2. 下载 PostgreSQL 18 RPM 包离线场景 # 若已提前下载好 RPM 包可跳过此步# wget https://download.postgresql.org/pub/repos/yum/18/redhat/rhel-8-x86_64/postgresql18-libs-*.rpm# wget https://download.postgresql.org/pub/repos/yum/18/redhat/rhel-8-x86_64/postgresql18-client-*.rpm# wget https://download.postgresql.org/pub/repos/yum/18/redhat/rhel-8-x86_64/postgresql18-server-*.rpm# wget https://download.postgresql.org/pub/repos/yum/18/redhat/rhel-8-x86_64/postgresql18-contrib-*.rpmecho 3. 安装 RPM 包按依赖顺序 sudorpm-ivhpostgresql18-libs-*.rpmsudorpm-ivhpostgresql18-client-*.rpmsudorpm-ivhpostgresql18-server-*.rpmsudorpm-ivhpostgresql18-contrib-*.rpmecho 4. 配置环境变量 exportPATH/usr/pgsql-18/bin:$PATHexportLD_LIBRARY_PATH/usr/pgsql-18/lib:$LD_LIBRARY_PATHechoexport PATH/usr/pgsql-18/bin:$PATH~/.bashrcechoexport LD_LIBRARY_PATH/usr/pgsql-18/lib:$LD_LIBRARY_PATH~/.bashrcsource~/.bashrcecho 5. 验证安装 psql--versionecho 6. 初始化数据库集群 sudomkdir-p/var/lib/pgsql/18/datasudochownpostgres:postgres /var/lib/pgsql/18/datasudochmod0700 /var/lib/pgsql/18/datasudosu- postgres-cinitdb -D /var/lib/pgsql/18/data -k -E UTF8 -U postgres -A scram-sha-256echo 7. 启动 PostgreSQL 服务 sudosu- postgres-cpg_ctl -D /var/lib/pgsql/18/data -l /var/lib/pgsql/18/logfile startecho 8. 连接验证 sudosu- postgres-cpsql -U postgres -d postgres -c SELECT version();echo 9. 创建测试表并插入数据 sudosu- postgres-cpsql -U postgres -d postgres -c CREATE TABLE demo (id SERIAL PRIMARY KEY, name TEXT);sudosu- postgres-cpsql -U postgres -d postgres -c INSERT INTO demo (name) VALUES (\Hello PostgreSQL\);sudosu- postgres-cpsql -U postgres -d postgres -c SELECT * FROM demo;echo PostgreSQL 18 安装与初始化完成 代码说明依赖顺序libs→client→server→contrib严格遵循依赖关系。环境变量PATH确保psql、initdb、pg_ctl等命令可直接调用LD_LIBRARY_PATH确保运行时能正确加载共享库。数据目录权限手动创建目录并设置为0700确保initdb不会因权限问题失败。校验和-k参数启用数据页校验和提升数据安全性。认证方式-A scram-sha-256使用 SCRAM-SHA-256 认证比 MD5 更安全。技术点总结技术点说明RPM 包管理掌握rpm -ivh安装命令及依赖顺序环境变量配置PATH和LD_LIBRARY_PATH的作用与配置方法数据目录权限0700权限要求及配置方式数据页校验和-k参数的作用与性能影响initdb初始化核心参数-D、-k、-E、-U、-A的使用pg_ctl服务管理启动、停止、重载等操作psql客户端连接连接数据库并执行 SQL项目难点与解决方案核心难点离线环境的依赖管理生产环境通常无法联网需提前规划并下载所有依赖的 RPM 包确保版本兼容性。源码编译的依赖链configure阶段会检查大量系统依赖缺少任一依赖都会导致编译失败需逐一排查并安装。数据目录权限问题initdb对数据目录权限有严格要求0700权限不当会导致初始化或启动失败。解决方案RPM 离线安装从官方 YUM 仓库下载完整的 RPM 包集合含libs、client、server、contrib、devel、docs按依赖顺序安装。源码编译依赖参考 PostgreSQL 官方文档的 Requirements 章节提前安装Development Tools及readline-devel、zlib-devel、flex、bison、openssl-devel等包。权限前置处理在运行initdb前以root身份创建数据目录并执行chown postgres:postgres和chmod 0700再切换至postgres用户执行初始化。广度本文覆盖了 PostgreSQL 在 Linux 平台上的三种主流安装方式涉及 RPM 包管理、YUM 仓库配置、源码编译工具链、环境变量配置、数据库集群初始化、服务管理及源码调试等多个维度适用于从初级运维到高级内核开发者的广泛读者群体。深度本文深入讲解了initdb各核心参数的设计意图如-k校验和的原理与性能代价、数据目录权限的底层要求、源码编译各依赖项的作用flex/bison的词法语法分析角色以及 GDB 调试 PostgreSQL 源码的实操方法具备较高的技术深度。复杂度RPM 安装的复杂度较低主要在于依赖顺序管理YUM 安装复杂度最低几乎为傻瓜式操作源码编译安装复杂度最高涉及依赖安装、编译选项调优、编译时间优化-j并行编译及后续的调试环境配置对操作者的系统管理能力要求较高。官方文档PostgreSQL 官方文档 - 从源码安装PostgreSQL 官方文档 - initdbPostgreSQL 官方文档 - pg_ctlPostgreSQL 官方文档 - psqlPostgreSQL 官方文档 - 编译要求PostgreSQL Wiki - 源码编译安装参考链接PostgreSQL YUM 仓库PostgreSQL 源码下载PostgreSQL 社区邮件列表 - RPM 离线安装讨论总结本文系统介绍了 PostgreSQL 的三种主流安装方式。RPM 离线安装是企业级生产环境的首选稳定可靠且不依赖网络YUM 在线安装最为简便快捷适合开发与测试环境源码编译安装提供了最大的灵活性支持调试符号、自定义编译选项及内核级定制是深度研究与内核开发的必经之路。无论采用哪种方式安装完成后的数据库集群初始化initdb都是关键步骤其中数据页校验和-k的开启、数据目录权限0700的设置以及认证方式的选择都直接影响数据库的运行安全与性能。掌握这三种安装方式即可在任何 Linux 环境中快速搭建 PostgreSQL 数据库服务。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价