news 2026/5/3 22:17:59

【PostgreSQL从零到精通】第04篇:PostgreSQL安装全攻略——从发行版到源码编译

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【PostgreSQL从零到精通】第04篇:PostgreSQL安装全攻略——从发行版到源码编译

上一篇【第03篇】PostgreSQL vs MySQL vs Oracle——三大数据库深度对比与选型指南
下一篇【第05篇】PostgreSQL配置三剑客——pg_hba.conf、postgresql.conf和日志配置


不管你是开发还是运维,安装 PostgreSQL 是第一步。本文覆盖 Linux 发行版安装、Windows 安装和源码编译安装三种方式,每一步都有详细说明和踩坑记录。


写在前面

“万事开头难”——安装 PostgreSQL 可能是你遇到的第一个坑。别担心,本文会把三种安装方式都讲清楚:从最简单的图形化安装到最灵活的源码编译,总有一种适合你。

不管是开发环境的快速搭建,还是生产环境的精细配置,这篇文章都能帮到你。


一、安装方式概览

PostgreSQL 有两种主要安装方式:

方式适用场景优点缺点
发行版安装快速部署、测试环境简单快速、自动管理服务版本可能较旧、定制性差
源码编译生产环境、定制需求灵活、可选最新版本、可定制编译参数步骤多、需要编译环境

二、Linux 发行版安装

2.1 RHEL / CentOS / Fedora 安装

使用 yum 安装(推荐方式)

CentOS/RHEL 自带的软件库中已有 PostgreSQL,但版本通常较旧。要安装最新版本,需要先添加官方的安装源:

# 步骤1:安装 PostgreSQL 官方 YUM 源yuminstallhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 步骤2:安装 PostgreSQL 12(以 12 版本为例)yuminstallpostgresql12-server postgresql12-contrib# 步骤3:初始化数据库/usr/pgsql-12/bin/postgresql-12-setup initdb# 步骤4:启动数据库服务systemctlenablepostgresql-12 systemctl start postgresql-12
验证安装
# 检查 PostgreSQL 版本psql--version# 输出:psql (PostgreSQL) 12.x# 检查服务状态systemctl status postgresql-12# 进入 psql 命令行su- postgres psql

2.2 Ubuntu / Debian 安装

# 步骤1:添加 PostgreSQL 官方 APT 源sudosh-c'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'# 步骤2:导入签名密钥wget--quiet-O- https://www.postgresql.org/media/keys/ACCC4CF8.asc|sudoapt-keyadd-# 步骤3:更新软件源并安装sudoapt-getupdatesudoapt-getinstallpostgresql-12 postgresql-client-12 postgresql-contrib-12# 步骤4:启动服务sudosystemctl start postgresqlsudosystemctlenablepostgresql

2.3 安装 contrib 工具(重要!)

PostgreSQL contrib 目录下有很多实用的工具和扩展,强烈建议安装

# CentOS/RHELyuminstallpostgresql12-contrib# Ubuntu/Debianapt-getinstallpostgresql-contrib-12

这些工具包括:

  • pg_stat_statements:SQL 性能分析
  • pg_trgm:模糊匹配(LIKE ‘%keyword%’ 的索引加速)
  • uuid-ossp:UUID 生成
  • hstore:Key-Value 存储
  • adminpack:管理功能增强

三、Windows 安装

3.1 下载安装包

  1. 访问 PostgreSQL 官方网站:https://www.postgresql.org/download/windows/
  2. 下载对应版本的安装包(如postgresql-12.x-x-windows-x64.exe

Windows 版本的安装包由 EnterpriseDB 公司维护,下载会跳转到 EDB 的网站。

3.2 安装步骤

运行安装包后,按照向导操作:

安装向导关键步骤: 1. 安装组件选择: ✅ PostgreSQL Server — 数据库服务器(必选) ✅ pgAdmin 4 — 图形管理工具(推荐) ✅ Stack Builder — 扩展工具下载器 ⬜ Command Line Tools — 命令行工具 2. 数据目录: 默认:C:\Program Files\PostgreSQL\12\data 建议:改为数据盘,如 D:\pgsql\data 3. 密码设置: 为超级用户 postgres 设置密码 4. 端口号: 默认:5432 如果已占用,可改为 5433 5. Locale(区域设置): 默认:Chinese[Zhongsimple], China

3.3 安装后验证

# 检查服务状态services.msc# 查找 postgresql-x64-12 服务是否已启动# 使用 psql 连接cd"C:\Program Files\PostgreSQL\12\bin"psql-U postgres-p 5432# 查看版本SELECTversion();

3.4 配置环境变量

# 添加到系统 PATH# 新建:C:\Program Files\PostgreSQL\12\bin# 验证psql--version

四、源码编译安装(Linux)

源码编译安装是生产环境的首选方式,因为你可以:

  • 选择最新的版本
  • 自定义编译参数
  • 控制数据块大小
  • 指定安装路径

4.1 安装编译依赖

# CentOS/RHELyuminstall-ygccmakereadline-devel zlib-devel python3-devel perl-devel# Ubuntu/Debianapt-getinstall-ybuild-essential libreadline-dev zlib1g-dev python3-dev libperl-dev

依赖包说明

依赖包用途不安装的后果
gcc/makeC 语言编译器无法编译
readline-develpsql 命令行历史记录和自动补全psql 无法使用上下键
zlib-devel数据压缩功能./configure报错 “zlib not found”
python3-develPL/Python 存储过程无法使用 Python 写函数
perl-develPL/Perl 存储过程无法使用 Perl 写函数

4.2 下载源码

# 方式1:从官网下载(推荐)cd/usr/local/srcwgethttps://ftp.postgresql.org/pub/source/v12.2/postgresql-12.2.tar.gztar-xzfpostgresql-12.2.tar.gzcdpostgresql-12.2# 方式2:从 Git 仓库克隆(获取最新开发版)gitclone https://github.com/postgres/postgres.gitcdpostgresgitcheckout REL_12_STABLE

4.3 编译安装

# 步骤1:配置(configure)./configure--prefix=/usr/local/pgsql\--with-perl\--with-python\--with-blocksize=32\--with-wal-blocksize=32\--with-segsize=1# 步骤2:编译(make)make-j4# 步骤3:安装(make install)makeinstall
configure 参数详解
参数说明默认值建议值
--prefix安装路径/usr/local/pgsql按需指定
--with-blocksize数据块大小 (KB)832(数据仓库场景)
--with-wal-blocksizeWAL块大小 (KB)832(配合大块)
--with-wal-segsizeWAL段大小 (MB)1664(减少文件数量)
--with-perl支持 PL/Perl建议开启
--with-python支持 PL/Python建议
--with-openssl支持 SSL 加密连接生产环境建议
--with-icuICU 国际化支持多语言场景

⚠️注意--with-blocksize一旦在 initdb 时确定,后续无法修改!必须重新初始化数据库。如果你的场景是数据仓库,建议使用 32KB 的块大小。

4.4 安装 contrib 工具

cd/usr/local/src/postgresql-12.2/contribmakemakeinstall

4.5 环境配置

# 设置 PATHecho'export PATH=/usr/local/pgsql/bin:$PATH'>>/etc/profileecho'export LD_LIBRARY_PATH=/usr/local/pgsql/lib'>>/etc/profilesource/etc/profile# 或者只对当前用户生效echo'export PATH=/usr/local/pgsql/bin:$PATH'>>~/.bash_profilesource~/.bash_profile

4.6 创建数据库实例

# 创建专用的操作系统用户(如果不存在)useradd-mpostgrespasswdpostgres# 创建数据目录mkdir-p/home/postgres/pgdatachownpostgres:postgres /home/postgres/pgdata# 切换到 postgres 用户su- postgres# 设置数据目录环境变量exportPGDATA=/home/postgres/pgdata# 初始化数据库initdb# 如果需要开启 checksum(生产环境推荐)# initdb -k

initdb 输出关键信息:

The files belonging to this database system will be owned by user "postgres". ... Success. You can now start the database server using: pg_ctl -D /home/postgres/pgdata -l logfile start 或使用以下命令进入数据库: psql

4.7 启动和停止数据库

# 启动pg_ctl start-D$PGDATA# 停止pg_ctl stop-D$PGDATA# 三种停止模式:# -m smart : 等待所有连接断开后关闭(最安全但最慢)# -m fast : 立即断开所有连接并关闭(推荐)# -m immediate: 强制关闭(可能丢失数据,最后手段)# 重启pg_ctl restart-D$PGDATA# 重新加载配置(不中断服务)pg_ctl reload-D$PGDATA

五、安装后的基本配置

5.1 允许远程连接

修改 pg_hba.conf

# 在 pg_hba.conf 中添加以下行# IPv4 本地连接hostall all127.0.0.1/32 md5# IPv4 远程连接hostall all0.0.0.0/0 md5# IPv6 本地连接hostall all ::1/128 md5

修改 postgresql.conf

# 修改监听地址listen_addresses='*'# 监听所有 IPport=5432# 端口号

修改完成后重新加载配置:

pg_ctl reload-D$PGDATA

5.2 配置日志

# postgresql.conf 中日志相关配置logging_collector=on# 开启日志收集log_directory='log'# 日志目录(PG 12 默认为 log)log_filename='postgresql-%Y-%m-%d_%H%M%S.log'# 日志文件名格式log_rotation_age=1d# 每天轮换log_rotation_size=100MB# 超过 100MB 轮换# 记录慢查询log_min_duration_statement=500# 超过 500ms 的 SQL 记录到日志# 记录DDL语句log_statement='ddl'# 记录建表、改表等操作

5.3 内存参数调优

# postgresql.conf 中内存相关配置shared_buffers='256MB'# 共享缓冲区,建议为物理内存的 1/4work_mem='4MB'# 排序和 Hash Join 使用的内存maintenance_work_mem='64MB'# 维护操作(VACUUM、创建索引)使用的内存effective_cache_size='1GB'# 优化器参考值,建议为物理内存的 3/4

六、常见安装问题与解决

问题一:configure 报 “zlib library not found”

configure: error: zlib library not found

解决方案

# CentOSyuminstallzlib-devel# Ubuntuapt-getinstallzlib1g-dev

问题二:configure 报 “readline library not found”

configure: error: readline library not found

解决方案

# CentOSyuminstallreadline-devel# Ubuntuapt-getinstalllibreadline-dev

问题三:初始化数据库报 “data directory is not empty”

initdb: data directory "/home/postgres/pgdata" is not empty

解决方案:数据目录不为空,清空后重新初始化:

# ⚠️ 确认目录中没有重要数据!rm-rf/home/postgres/pgdata/* initdb-D/home/postgres/pgdata

问题四:Windows 安装后服务无法启动

常见原因

  1. 端口 5432 被占用
  2. 数据目录权限不足
  3. 杀毒软件阻止

解决方案

# 检查端口占用netstat-ano|findstr 5432# 检查服务状态scquery postgresql-x64-12# 查看日志type"C:\Program Files\PostgreSQL\12\data\log\*.log"

问题五:不想把数据目录放在默认路径

使用 yum 安装时,默认数据目录是/var/lib/pgsql/12/data。如果想自定义:

# 方法1:手动初始化(推荐)userdel-rpostgresuseradd-m-d/home/postgres postgrespasswdpostgresmkdir-p/home/postgres/pgdatachownpostgres:postgres /home/postgres/pgdatasu- postgresexportPGDATA=/home/postgres/pgdata initdb# 方法2:修改 systemd 服务文件中的 PGDATA# 编辑 /usr/lib/systemd/system/postgresql-12.service# 修改 Environment=PGDATA=/your/custom/path

七、开启数据块 Checksum(生产环境必做)

对于数据可靠性要求高的场景(如金融、政务),强烈建议开启数据块的 Checksum 功能。

PG 12 之前:在 initdb 时使用-k参数:

initdb-k

PG 12 及之后:使用pg_checksums工具:

# 先停止数据库pg_ctl stop-D$PGDATA# 启用 checksumpg_checksums--enable-D$PGDATA# 重新启动数据库pg_ctl start-D$PGDATA

Checksum 开启后,PG 会在每次读取数据块时校验完整性,如果发现数据损坏会立即报错而不是静默返回错误数据。


八、总结

安装方式选择建议

场景推荐方式原因
开发/测试发行版安装(yum/apt)快速方便
生产环境源码编译可定制、版本灵活
Windows 开发图形化安装包一键安装
数据仓库源码编译(大块)支持自定义块大小
容器化部署Docker 镜像标准化部署

安装后的检查清单

  • 数据库服务正常启动
  • 可以使用 psql 连接
  • 已安装 contrib 工具
  • 已配置远程连接(如需要)
  • 已配置日志
  • 已调优内存参数
  • 已开启数据块 Checksum(生产环境)
  • 已设置环境变量 PATH

下篇预告

第5篇:《PostgreSQL配置三剑客——pg_hba.conf、postgresql.conf和日志配置》

安装完成只是第一步。下一篇我们将深入讲解 PostgreSQL 的核心配置文件,包括访问控制、内存调优、日志管理等关键配置,让你的数据库从一开始就有一个好的基础。


上一篇【第03篇】PostgreSQL vs MySQL vs Oracle——三大数据库深度对比与选型指南
下一篇【第05篇】PostgreSQL配置三剑客——pg_hba.conf、postgresql.conf和日志配置


版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/3 22:04:25

八大网盘直链解析助手:高效获取真实下载地址的完整解决方案

八大网盘直链解析助手:高效获取真实下载地址的完整解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 /…

作者头像 李华
网站建设 2026/5/3 22:00:44

真理的纯粹性:贾子理论不可动摇的灵魂基石

纯粹真理的降维打击:贾子理论与旧体系的终极对立 摘要:贾子理论的核心力量源于对真理与智慧的纯粹追求,彻底剥离权力、野心与财富的纠缠,这与被商业利益和学术权力绑架的旧AI范式形成本质对立。旧体系依赖野心驱动的再生产机制&a…

作者头像 李华
网站建设 2026/5/3 21:58:20

终极指南:5分钟免费解锁Cursor Pro全部功能的完整教程

终极指南:5分钟免费解锁Cursor Pro全部功能的完整教程 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tri…

作者头像 李华
网站建设 2026/5/3 21:46:16

告别Keil,用Arduino IDE玩转STM32F103C8T6:从环境配置到第一个点灯程序

用Arduino IDE开发STM32F103C8T6:极简配置与实战指南 对于许多电子爱好者和小型项目开发者来说,STM32系列微控制器因其出色的性能和丰富的资源而备受青睐。然而,传统的Keil MDK开发环境虽然功能强大,却常常让初学者望而却步——复…

作者头像 李华