上一篇我们认识了 PG 社区和资源获取方式。这一篇,我们正式动手——在 Linux、Windows、macOS 三大平台上安装 PostgreSQL,初始化数据库,启动服务,并理解那些安装阶段就决定性能上限的关键参数。
一、安装方式怎么选?
在动手之前,先想清楚一个问题:用包管理器安装,还是源码编译?
| 方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 包管理器安装 | 简单、快、自动处理依赖 | 版本可能偏旧,编译选项固定 | 开发环境、大多数生产环境 |
| 源码编译 | 版本自由、编译选项可定制 | 耗时、依赖手动处理、升级麻烦 | 需要特定扩展、极致性能调优、测试新版本 |
生产环境的默认建议:优先选择包管理器安装。PostgreSQL 官方维护着 APT 和 YUM 仓库,版本更新及时,安全补丁自动跟进。只有当你有明确的定制需求(比如启用某个实验性编译选项、为特定扩展修改源码)时,才考虑源码编译。
下面按平台逐一展开。
二、Linux 安装(以 Ubuntu/Debian 为例)
方式一:使用系统自带仓库
最简单的方式,直接使用发行版自带的仓库:
sudoaptupdatesudoaptinstallpostgresql postgresql-contrib-y安装完成后,PostgreSQL 会自动创建postgres系统用户,并初始化一个默认的数据库集群。查看服务状态:
sudosystemctl status postgresql这种方式的问题是:Debian/Ubuntu 官方仓库中的 PG 版本通常会滞后于 PG 官方最新版。如果你需要最新版本(比如 17 或 18),需要使用方式二。
方式二:使用 PostgreSQL 官方 APT 仓库(推荐)
官方仓库能让你在同一个系统上安装多个 PG 版本,并且版本更新更及时。
# 安装仓库配置工具sudoaptinstall-ypostgresql-common# 自动配置 PostgreSQL 官方仓库sudo/usr/share/postgresql-common/pgdg/apt.postgresql.org.sh# 安装指定版本(例如 17)sudoaptupdatesudoaptinstallpostgresql-17-y官方 APT 仓库支持当前版本的 Ubuntu,包括 26.10、26.04 等。如果你需要安装特定版本,把postgresql-17换成目标版本号即可。
注意:Ubuntu 20.04 已进入扩展安全维护阶段,不再被当前 PostgreSQL APT 仓库支持。如果还在用 20.04,建议先升级系统或使用系统自带仓库。
启动与基本验证
# 启动服务sudosystemctl start postgresqlsudosystemctlenablepostgresql# 切换到 postgres 用户sudo-i-upostgres# 进入 psqlpsql# 查看版本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,这是最轻量、最贴近开发者习惯的方式。
# 安装最新稳定版brewinstallpostgresql# 或安装特定版本(如 15)brewinstallpostgresql@15# 启动服务brew services start postgresqlHomebrew 安装后,PostgreSQL 的数据目录位于/opt/homebrew/var/postgresql@版本号(Apple Silicon)或/usr/local/var/postgresql@版本号(Intel Mac)。
其他可选方式包括 EnterpriseDB 图形化安装程序、Postgres.app(自包含 GUI 应用)和 MacPorts。对于日常开发,Homebrew 足够;如果你想要一个“开箱即用”的体验,Postgres.app 更友好。
五、源码编译安装
源码编译适合需要定制编译选项或使用最新开发版的场景。基本流程如下:
# 下载源码并解压tar-xzfpostgresql-17.x.tar.gzcdpostgresql-17.x# 配置编译选项./configure--prefix=/apps/pgsql\--with-openssl\--with-libxml\--with-systemd# 编译并安装makesudomakeinstall./configure阶段可以指定很多选项。常用的包括:
--prefix:安装路径;--with-openssl:启用 SSL 支持;--with-python:启用 PL/Python;--enable-debug:开启调试符号(仅开发用)。
编译完成后,需要手动创建postgres用户和数据目录,然后运行initdb初始化。
六、initdb:初始化数据库集群的关键参数
initdb是创建数据库集群的第一步。它决定了 locale、字符集、认证方式等基础配置。以下是最需要关注的参数:
–locale 和 --encoding
initdb-D/var/lib/pgsql/data\--locale=C\--encoding=UTF8--locale影响排序规则和字符处理。生产环境建议使用C或en_US.UTF-8,避免使用依赖系统 locale 的设置,否则在不同机器间迁移时可能出现排序不一致。--encoding通常设为UTF8,除非有特殊兼容需求。
–data-checksums
initdb-D/var/lib/pgsql/data --data-checksums启用数据页校验和。强烈建议生产环境开启。它能在硬件故障或存储损坏时提前发现数据页错误,而不是等到查询返回错误结果时才暴露。
–auth-local 和 --auth-host
initdb-D/var/lib/pgsql/data\--auth-local=peer\--auth-host=scram-sha-256peer认证用于本地 Unix socket 连接,scram-sha-256是当前推荐的密码认证方式。不要使用trust除非是在完全隔离的测试环境。
–pwfile
initdb-D/var/lib/pgsql/data--pwfile=/tmp/pgpass从文件读取超级用户密码,避免密码出现在命令行历史中。
性能相关:–no-sync 的警告
initdb默认会等待所有文件安全写入磁盘。--no-sync可以加速初始化,但官方明确警告:该选项仅适用于测试,不应在生产安装中使用。
七、服务启动与端口配置
启动服务
Linux(systemd):
sudosystemctl start postgresqlsudosystemctlenablepostgresql# 开机自启macOS(Homebrew):
brew services start postgresqlWindows:
安装程序会自动注册 Windows 服务,通过服务管理器启动,或使用:
net start postgresql-x64-17关键配置:listen_addresses 和 port
这两个参数在postgresql.conf中配置,修改后需要重启服务生效(listen_addresses和port只能在服务器启动时设置)。
# 监听所有地址(允许远程连接) 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 不一致、端口冲突、认证配置错误?欢迎在评论区分享你的经历。