上一篇我们认识了 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 官网的图形化安装包。
步骤
- 下载安装包 :访问
postgresql.org/download/windows/,下载最新的 Interactive Installer。 - 运行安装向导:双击安装包,按照提示操作。
- 关键配置项 :
- 超级用户密码 :设置
postgres用户的密码,务必牢记; - 端口 :默认
5432,如果与其他服务冲突可以修改; - Locale :建议选择
C或与你业务匹配的 locale; - 组件选择:如果只需要命令行工具,可以取消勾选 pgAdmin。
- 超级用户密码 :设置
- 将 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 等)。
八、安装后验证清单
安装完成后,按以下清单逐项验证:
- 服务状态 :
systemctl status postgresql或brew services list显示 running; - 版本确认 :
psql --version与预期一致; - 本地连接 :
sudo -u postgres psql能进入交互界面; - 远程连接测试 (如已配置):从另一台机器执行
psql -h <host> -U postgres; - 端口监听 :
ss -tlnp | grep 5432确认端口在监听; - 日志检查 :查看
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 不一致、端口冲突、认证配置错误?欢迎在评论区分享你的经历。