PG实战笔记 | 06 PostgreSQL基础安装部署:Linux/Windows/macOS全攻略

上一篇我们认识了 PG 社区和资源获取方式。这一篇,我们正式动手------在 Linux、Windows、macOS 三大平台上安装 PostgreSQL,初始化数据库,启动服务,并理解那些安装阶段就决定性能上限的关键参数。

一、安装方式怎么选?

在动手之前,先想清楚一个问题:用包管理器安装,还是源码编译?

方式 优点 缺点 适用场景
包管理器安装 简单、快、自动处理依赖 版本可能偏旧,编译选项固定 开发环境、大多数生产环境
源码编译 版本自由、编译选项可定制 耗时、依赖手动处理、升级麻烦 需要特定扩展、极致性能调优、测试新版本

生产环境的默认建议:优先选择包管理器安装。 PostgreSQL 官方维护着 APT 和 YUM 仓库,版本更新及时,安全补丁自动跟进。只有当你有明确的定制需求(比如启用某个实验性编译选项、为特定扩展修改源码)时,才考虑源码编译。

下面按平台逐一展开。

二、Linux 安装(以 Ubuntu/Debian 为例)

方式一:使用系统自带仓库

最简单的方式,直接使用发行版自带的仓库:

bash 复制代码
sudo apt update
sudo apt install postgresql postgresql-contrib -y

安装完成后,PostgreSQL 会自动创建 postgres 系统用户,并初始化一个默认的数据库集群。查看服务状态:

bash 复制代码
sudo systemctl status postgresql

这种方式的问题是:Debian/Ubuntu 官方仓库中的 PG 版本通常会滞后于 PG 官方最新版。如果你需要最新版本(比如 17 或 18),需要使用方式二。

方式二:使用 PostgreSQL 官方 APT 仓库(推荐)

官方仓库能让你在同一个系统上安装多个 PG 版本,并且版本更新更及时。

bash 复制代码
# 安装仓库配置工具
sudo apt install -y postgresql-common

# 自动配置 PostgreSQL 官方仓库
sudo /usr/share/postgresql-common/pgdg/apt.postgresql.org.sh

# 安装指定版本(例如 17)
sudo apt update
sudo apt install postgresql-17 -y

官方 APT 仓库支持当前版本的 Ubuntu,包括 26.10、26.04 等。如果你需要安装特定版本,把 postgresql-17 换成目标版本号即可。

注意: Ubuntu 20.04 已进入扩展安全维护阶段,不再被当前 PostgreSQL APT 仓库支持。如果还在用 20.04,建议先升级系统或使用系统自带仓库。

启动与基本验证

bash 复制代码
# 启动服务
sudo systemctl start postgresql
sudo systemctl enable postgresql

# 切换到 postgres 用户
sudo -i -u postgres

# 进入 psql
psql

# 查看版本
SELECT version();

三、Windows 安装

Windows 上最推荐的方式是使用官方图形化安装程序。PostgreSQL 官方建议大多数用户下载 Windows 二进制发行版,即来自 PostgreSQL 官网的图形化安装包。

步骤

  1. 下载安装包 :访问 postgresql.org/download/windows/,下载最新的 Interactive Installer。
  2. 运行安装向导:双击安装包,按照提示操作。
  3. 关键配置项 :
    • 超级用户密码 :设置 postgres 用户的密码,务必牢记;
    • 端口 :默认 5432,如果与其他服务冲突可以修改;
    • Locale :建议选择 C 或与你业务匹配的 locale;
    • 组件选择:如果只需要命令行工具,可以取消勾选 pgAdmin。
  4. 将 bin 目录加入 PATH :安装完成后,把 PostgreSQL 的 bin 目录(如 C:\Program Files\PostgreSQL\17\bin)加入系统环境变量,这样才能在任意位置使用 psql。

ZIP Archive 方式

如果你不想用安装程序,也可以下载 ZIP Archive 压缩包。解压后手动运行 initdb 初始化数据目录,再通过 pg_ctl 启动。这种方式更灵活,但需要手动配置,适合有经验的用户。

四、macOS 安装

macOS 上推荐使用 Homebrew,这是最轻量、最贴近开发者习惯的方式。

bash 复制代码
# 安装最新稳定版
brew install postgresql

# 或安装特定版本(如 15)
brew install postgresql@15

# 启动服务
brew services start postgresql

Homebrew 安装后,PostgreSQL 的数据目录位于 /opt/homebrew/var/postgresql@版本号(Apple Silicon)或 /usr/local/var/postgresql@版本号(Intel Mac)。

其他可选方式包括 EnterpriseDB 图形化安装程序、Postgres.app(自包含 GUI 应用)和 MacPorts。对于日常开发,Homebrew 足够;如果你想要一个"开箱即用"的体验,Postgres.app 更友好。

五、源码编译安装

源码编译适合需要定制编译选项或使用最新开发版的场景。基本流程如下:

bash 复制代码
# 下载源码并解压
tar -xzf postgresql-17.x.tar.gz
cd postgresql-17.x

# 配置编译选项
./configure --prefix=/apps/pgsql \
            --with-openssl \
            --with-libxml \
            --with-systemd

# 编译并安装
make
sudo make install

./configure 阶段可以指定很多选项。常用的包括:

  • --prefix:安装路径;
  • --with-openssl:启用 SSL 支持;
  • --with-python:启用 PL/Python;
  • --enable-debug:开启调试符号(仅开发用)。

编译完成后,需要手动创建 postgres 用户和数据目录,然后运行 initdb 初始化。

六、initdb:初始化数据库集群的关键参数

initdb 是创建数据库集群的第一步。它决定了 locale、字符集、认证方式等基础配置。以下是最需要关注的参数:

--locale 和 --encoding

bash 复制代码
initdb -D /var/lib/pgsql/data \
       --locale=C \
       --encoding=UTF8

--locale 影响排序规则和字符处理。生产环境建议使用 C 或 en_US.UTF-8 ,避免使用依赖系统 locale 的设置,否则在不同机器间迁移时可能出现排序不一致。--encoding 通常设为 UTF8,除非有特殊兼容需求。

--data-checksums

bash 复制代码
initdb -D /var/lib/pgsql/data --data-checksums

启用数据页校验和。强烈建议生产环境开启。 它能在硬件故障或存储损坏时提前发现数据页错误,而不是等到查询返回错误结果时才暴露。

--auth-local 和 --auth-host

bash 复制代码
initdb -D /var/lib/pgsql/data \
       --auth-local=peer \
       --auth-host=scram-sha-256

peer 认证用于本地 Unix socket 连接,scram-sha-256 是当前推荐的密码认证方式。不要使用 trust 除非是在完全隔离的测试环境。

--pwfile

bash 复制代码
initdb -D /var/lib/pgsql/data --pwfile=/tmp/pgpass

从文件读取超级用户密码,避免密码出现在命令行历史中。

性能相关:--no-sync 的警告

initdb 默认会等待所有文件安全写入磁盘。--no-sync 可以加速初始化,但官方明确警告:该选项仅适用于测试,不应在生产安装中使用。

七、服务启动与端口配置

启动服务

Linux(systemd):

bash 复制代码
sudo systemctl start postgresql
sudo systemctl enable postgresql   # 开机自启

macOS(Homebrew):

bash 复制代码
brew services start postgresql

Windows:

安装程序会自动注册 Windows 服务,通过服务管理器启动,或使用:

cmd 复制代码
net start postgresql-x64-17

关键配置:listen_addresses 和 port

这两个参数在 postgresql.conf 中配置,修改后需要重启服务生效 (listen_addresses 和 port 只能在服务器启动时设置)。

ini 复制代码
# 监听所有地址(允许远程连接)
listen_addresses = '*'

# 或仅监听本地
listen_addresses = 'localhost'

# 端口,默认 5432
port = 5432

生产安全提醒: 将 listen_addresses 设为 '*' 后,还需要在 pg_hba.conf 中配置允许哪些 IP 以何种方式连接。仅仅修改 listen_addresses 并不会自动开放访问。

如果同一台机器上运行多个 PG 实例,可以为每个实例分配不同端口(5433、5434 等)。

八、安装后验证清单

安装完成后,按以下清单逐项验证:

  1. 服务状态 :systemctl status postgresql 或 brew services list 显示 running;
  2. 版本确认 :psql --version 与预期一致;
  3. 本地连接 :sudo -u postgres psql 能进入交互界面;
  4. 远程连接测试 (如已配置):从另一台机器执行 psql -h <host> -U postgres;
  5. 端口监听 :ss -tlnp | grep 5432 确认端口在监听;
  6. 日志检查 :查看 log/ 目录下最新日志,确认无启动错误。

九、总结

安装 PostgreSQL 本身并不复杂,但安装阶段的选择会影响后续的运维成本和性能上限。

  • 方式选择:生产环境优先包管理器安装,需要定制时再源码编译;
  • 版本选择:使用官方 APT/YUM 仓库获取最新稳定版;
  • initdb 参数 :--data-checksums 必开,locale 设为 C 或 en_US.UTF-8,认证用 scram-sha-256;
  • 配置安全 :listen_addresses 和 pg_hba.conf 配合使用,不要只改一处。

一句话:安装不是走过场,initdb 阶段的每一个参数,都在为数据库的未来"定调"。

下一篇,我们聊聊 PostgreSQL 的常见编译项及其作用------如果你确实需要源码编译,哪些选项值得开,哪些应该关。


思考题:

你在生产环境安装 PostgreSQL 时,是选择包管理器还是源码编译?遇到过哪些安装阶段的"坑"------locale 不一致、端口冲突、认证配置错误?欢迎在评论区分享你的经历。

相关推荐
zbyyd1 小时前
Linux 驱动开发实战:从手写 LED 字符设备驱动到设备树
linux·驱动开发
行者-全栈开发2 小时前
【码动四季·秋】基于开源做发行版:MySQL/PostgreSQL 国产化发行版的技术路径与选型实战
postgresql·开源数据库·opengauss·选型·国产化替代
灯澜忆梦2 小时前
【Linux】#7 | vi/vim 编辑器
linux·编辑器·vim
Escalating_xu2 小时前
【Linux 网络编程】UDP Socket 编程(上):从地址与字节序到完整回显服务器
linux·服务器·网络
万年咸鱼2 小时前
iOS 27 适配笔记
笔记·ios·cocoa
重生之小比特2 小时前
【Linux系统】08 进程切换
linux·运维·服务器
kyle~2 小时前
Linux --- 内存管理内核子系统
linux·运维·服务器
昌原的儿子LEO2 小时前
嵌入式 Linux I2C 驱动开发核心知识总结:设备树与 platform 架构全解析
linux·驱动开发·架构
Swilderrr2 小时前
论文精读 | Fast Approximate Similarity Join in Vector Databases(SimJoin)
笔记·学习