尧图精选

Windows 上安装 PostgreSQL 18 完整指南:从下载到 pgAgent 配置与避坑

🕒 发布时间:2026/9/19 14:20:09 📁 来源:尧图网络
1. 为什么要在 Windows 上装 PostgreSQL 18PostgreSQL 18 是当前开源关系型数据库里功能迭代最激进的一个大版本异步 I/O 子系统重写、查询计划器改进、逻辑复制增强这些特性对做后端开发、数据分析、甚至本地跑 AI 应用向量存储的人都很有吸引力。但很多人第一次在 Windows 上装它的时候会卡在几个地方安装包选哪个、pgAdmin 要不要一起装、Stack Builder 弹出来一堆东西到底勾不勾、装完之后 psql 命令找不到、服务起不来。我自己前前后后在 Windows 10、Windows 11、Windows Server 上装过不下二十次 PostgreSQL从 9.x 一路装到 18踩过的坑基本能写一本小册子。这篇内容就是把我这些年装 PostgreSQL 的完整流程和踩坑经验整理出来从下载安装包开始到 pgAdmin 配置、Stack Builder 组件选择、pgAgent 任务调度、环境变量设置、服务排查一步步讲清楚。不管你是刚接触数据库的新手还是从 MySQL 转过来的老手照着走一遍基本能一次装好。我会重点解释每一步为什么这么做而不是只给你一个“下一步”按钮的截图流程因为只有理解了原理出了问题你才知道去哪查。Windows 上装 PostgreSQL 和 Linux 上最大的区别在于Windows 没有包管理器帮你处理依赖所有东西都得靠安装器自己搞定而且 Windows 的服务管理机制、权限模型、路径规则都和 Linux 不一样。所以你会看到安装器问你要数据目录放哪、端口用哪个、locale 选什么这些在 Linux 上通常一个apt install就默认处理了。理解这些差异是顺利装好的前提。2. 安装前的准备工作与版本选择2.1 确认系统版本和硬件条件PostgreSQL 18 对 Windows 的最低要求是 Windows 10 1809 及以上、Windows Server 2019 及以上64 位系统。我实测在 Windows 11 23H2 和 Windows Server 2022 上都没问题。硬件方面官方建议至少 2GB 内存但如果你打算跑实际业务或者本地做数据分析我建议至少 8GB因为 PostgreSQL 默认会分配 shared_buffers 为内存的 25%内存太小会导致频繁换页性能断崖式下跌。磁盘空间上安装包本身大约 350MB装完之后数据目录初始占用大概 40-50MB但你要预留至少 10GB 给后续的数据增长和 WAL 日志。我见过有人把数据目录放在系统盘 C 盘结果跑了半年 C 盘爆了数据库直接起不来。所以我的习惯是数据目录单独放一个盘比如 D:\pgdata这样即使系统重装数据也还在。还有一个容易被忽略的点Windows 的杀毒软件和 Windows Defender 会实时扫描 PostgreSQL 的数据目录和 WAL 文件导致写入性能下降 30% 以上。我一般会在安装完成后把数据目录和 PostgreSQL 的 bin 目录加入杀毒软件的白名单。这个操作在后面的章节会详细讲。2.2 安装包从哪下、选哪个PostgreSQL 官方 Windows 安装包由 EDBEnterpriseDB提供下载地址是https://www.enterprisedb.com/downloads/postgres-postgresql-downloads。打开页面后你会看到各个版本的下载链接找到 PostgreSQL 18 那一行点 Windows x86-64 的下载按钮。文件大概 350MB 左右名字类似postgresql-18.x-windows-x64.exe。这里有个坑网上有些第三方站点提供的“绿色版”“免安装版”PostgreSQL我强烈不建议用。这些版本往往缺少完整的服务注册脚本pgAdmin 和 Stack Builder 也可能被阉割出了问题你连日志都找不到。官方安装器虽然体积大一点但它帮你处理了服务注册、环境变量、数据目录初始化这些琐事省心得多。下载的时候注意核对文件大小和数字签名。右键安装包属性数字签名应该能看到 EDB 的签名信息。如果签名无效或者没有签名别装重新下。我遇到过有人从某个网盘下的安装包被捆绑了挖矿程序装完数据库之后 CPU 一直跑满查了半天才发现是安装包被篡改了。2.3 安装前的系统检查清单在双击安装包之前我习惯先做几项检查避免装到一半失败确认当前登录的 Windows 账户有管理员权限。PostgreSQL 安装器需要注册系统服务没有管理员权限会在最后一步失败。确认 5432 端口没有被占用。用netstat -ano | findstr 5432查一下如果有输出说明有别的程序在用这个端口要么先停掉那个程序要么安装时换一个端口。确认系统区域设置里的“Beta: 使用 Unicode UTF-8 提供全球语言支持”这个选项的状态。如果勾了安装时 locale 选择会有差异可能导致中文排序异常。我一般建议不勾用默认的 Chinese (Simplified)_China.936 或者直接选 C locale。关闭所有正在运行的数据库客户端工具比如 Navicat、DBeaver避免安装过程中文件被占用。这些检查花不了两分钟但能避免很多莫名其妙的安装失败。3. 安装过程逐步拆解3.1 安装向导的前几个页面双击安装包后首先弹出的是安装向导。第一页是欢迎界面直接 Next。第二页是安装目录选择默认是C:\Program Files\PostgreSQL\18。我一般不改这个路径因为程序文件放系统盘没问题真正占空间的是数据目录那个在后面单独设置。第三页是组件选择这里有四个勾选项PostgreSQL Server、pgAdmin 4、Stack Builder、Command Line Tools。这四个我建议全勾上。PostgreSQL Server 是核心必须装pgAdmin 4 是图形化管理工具虽然你也可以用 Navicat 或者 DBeaver但 pgAdmin 是官方配套的版本兼容性最好Stack Builder 是附加组件管理器后面装 pgAgent 或者 PostGIS 会用到Command Line Tools 包含 psql、pg_dump、pg_restore 这些命令行工具做备份恢复和自动化脚本必备。有人会问 pgAdmin 能不能不装用 Navicat 代替。可以但 pgAdmin 有一个 Navicat 没有的优势它和 PostgreSQL 的版本同步更新新版本特性支持最快。比如 PostgreSQL 18 的逻辑复制新功能pgAdmin 4 在发布当天就支持了而第三方工具往往要等几周甚至几个月。所以我建议还是装上不用也可以留着。3.2 数据目录和密码设置第四页是数据目录选择默认是C:\Program Files\PostgreSQL\18\data。这里我强烈建议改到非系统盘比如D:\PostgreSQL\18\data。原因前面说过数据增长会很快系统盘空间紧张会影响整个系统。而且 Windows 的 UAC 和权限控制对 Program Files 目录管得很严有时候备份工具或者脚本访问数据目录会被拒绝放到 D 盘就少很多麻烦。第五页是超级用户密码设置。PostgreSQL 的默认超级用户是postgres这里设置的密码就是它的密码。密码要求至少 8 位我建议用大小写字母加数字加符号的组合因为 5432 端口如果暴露在公网弱密码会被暴力破解。虽然本地开发环境风险低但养成好习惯没坏处。密码记牢后面 pgAdmin 连接和 psql 登录都要用。注意这个密码一旦设置安装完成后没法通过安装器修改。忘了密码只能用pg_hba.conf改成 trust 认证再重置比较麻烦。所以设置的时候确认好。3.3 端口和 locale 选择第六页是端口设置默认 5432。如果你机器上已经有别的 PostgreSQL 实例或者 5432 被占用这里改成 5433 或者别的。我一般保持 5432因为这是 PostgreSQL 的约定端口很多工具默认就连这个改了之后每次连接都要手动指定端口麻烦。第七页是 locale 设置这个页面很多人直接 Next 就过了但其实有讲究。Locale 决定了数据库的字符排序规则、日期格式、货币符号等。默认是Chinese (Simplified)_China.936对应的编码是 GBK 或者 GB18030。但 PostgreSQL 官方推荐用 UTF-8 编码因为 UTF-8 能表示所有字符不会出现乱码。我的做法是Locale 选CEncoding 选UTF8。这样数据库内部用 UTF-8 存储排序规则用 C locale按字节序排性能最好而且不会有中文排序的奇怪问题。如果你需要按拼音排序中文那可以选Chinese (Simplified)_China.936但编码还是建议 UTF8。实际上从 PostgreSQL 16 开始ICU collation 已经可以独立于 locale 设置所以 locale 选 C 完全不影响中文处理。3.4 安装执行和最后的 Stack Builder确认所有设置后点 Next安装器开始复制文件、初始化数据目录、注册服务。这个过程大概 2-5 分钟取决于磁盘速度。进度条走完后会弹出一个页面问你要不要运行 Stack Builder。这里先不勾直接 Finish因为 Stack Builder 需要联网下载组件我们先把基础环境验证好再装附加组件。安装完成后你会在 Windows 服务列表里看到postgresql-x64-18这个服务状态应该是“正在运行”。在开始菜单里能看到 PostgreSQL 18 文件夹里面有 pgAdmin 4、SQL Shell (psql)、Stack Builder 等快捷方式。4. 安装后的验证与基础配置4.1 验证服务状态和 psql 连接安装完成后第一件事是验证服务是否正常。打开 PowerShell 或者 CMD输入sc query postgresql-x64-18如果看到STATE : 4 RUNNING说明服务正常。如果显示 STOPPED手动启动一下net start postgresql-x64-18如果启动失败去看数据目录下的log文件夹里的日志文件通常会有具体错误信息。常见的启动失败原因包括数据目录权限不对、端口被占用、postgresql.conf配置有语法错误。服务正常后用 psql 测试连接。在开始菜单里找到 SQL Shell (psql)点开后会依次问你 Server、Database、Port、Username、Password。Server 直接回车用默认的 localhostDatabase 回车用默认的 postgresPort 回车用 5432Username 回车用 postgres然后输入你安装时设置的密码。如果看到postgres#提示符说明连接成功。你也可以在 PowerShell 里直接跑psql -U postgres -h localhost -p 5432但前提是 psql 的路径已经加到环境变量里。安装器默认不会自动加需要手动配置。4.2 配置环境变量让 psql 全局可用安装器不会自动把 PostgreSQL 的 bin 目录加到 PATH 里所以你在任意目录下敲psql会提示“不是内部或外部命令”。解决办法是手动加环境变量右键“此电脑”属性高级系统设置环境变量。在“系统变量”里找到 Path编辑新建一条C:\Program Files\PostgreSQL\18\bin。确定保存后重新打开 PowerShell输入psql --version应该显示psql (PostgreSQL) 18.x。这一步看起来简单但很多人装完之后一直用开始菜单里的 SQL Shell不知道可以全局调用 psql。加上环境变量后你可以在任何项目目录下直接跑psql、pg_dump、pg_restore做自动备份脚本的时候特别方便。4.3 pgAdmin 4 的首次配置pgAdmin 4 是一个基于 Web 技术的桌面应用启动的时候会在本地起一个小型 Web 服务然后用浏览器或者内置窗口打开。第一次启动会稍微慢一点因为要初始化配置。打开 pgAdmin 4 后左侧的 Servers 列表里应该已经有一个PostgreSQL 18的条目这是安装器自动注册的。双击它会提示输入密码就是你安装时设置的那个。连接成功后你可以展开 Databases、Schemas、Tables 等节点看到默认的 postgres 数据库。如果连接失败检查几点服务是否在运行、端口是否对、密码是否正确、pg_hba.conf里的认证方式是否是 scram-sha-256。pgAdmin 4 的日志在%APPDATA%\pgAdmin\pgadmin4.log出问题可以去看。pgAdmin 4 有一个我特别喜欢的功能Query Tool。你可以在里面写 SQL、执行、看执行计划、导出结果。对于日常开发调试来说比命令行方便很多。而且它支持 ERD 图生成做数据库设计的时候很直观。5. Stack Builder 与 pgAgent 组件安装5.1 Stack Builder 是什么、怎么用Stack Builder 是 PostgreSQL 官方提供的一个附加组件下载和安装工具。它本身不包含组件而是从 EDB 的服务器上拉取组件列表然后你勾选需要的组件它帮你下载并安装。常见的组件包括组件名称用途是否推荐pgAgent定时任务调度需要定时跑 SQL 的装PostGIS地理空间数据支持做 GIS 的装pgBouncer连接池高并发场景装Npgsql.NET 驱动.NET 开发装psqlODBCODBC 驱动用 Excel 或 BI 工具连的装pgJDBCJava 驱动Java 开发装打开 Stack Builder 后第一步选择目标安装下拉框里选PostgreSQL 18 (x64) on port 5432。然后它会联网拉取组件列表这个过程可能需要几十秒取决于网络。拉取完成后展开 Categories勾选你需要的组件然后一路 Next 下载安装。注意Stack Builder 下载组件时走的是 HTTPS但有些公司网络会拦截或者限速导致下载失败。如果遇到这种情况可以手动去 EDB 的 FTP 或者 GitHub 上下载对应的安装包然后单独安装。5.2 pgAgent 的安装与配置pgAgent 是 PostgreSQL 的定时任务代理类似 Linux 上的 cron但它是跑在数据库层面的可以定时执行 SQL 语句或者存储过程。安装 pgAgent 分两步先在 Stack Builder 里装 pgAgent 的可执行文件然后在数据库里创建 pgAgent 的 schema。Stack Builder 里勾选 pgAgent安装完成后打开 pgAdmin 4连接到你的数据库右键点击postgres数据库选择Create-Extension在列表里找到pgagent创建。这一步会在数据库里建几个表用来存储任务定义和执行日志。创建完 extension 后你还需要在 Windows 服务里注册 pgAgent 服务。打开 CMD管理员进入 pgAgent 的安装目录通常在C:\Program Files\PostgreSQL\18\bin执行pgagent INSTALL pgAgent -u postgres -p 你的密码 -h localhost -d postgres这个命令会注册一个名为pgAgent的 Windows 服务。然后启动它net start pgAgent服务启动后在 pgAdmin 4 里刷新你会看到多了一个pgAgent Jobs节点。右键新建 Job可以设置调度计划、步骤、执行 SQL。我一般用它来做每日的数据清理、统计汇总、备份触发等。5.3 其他常用组件的选择建议除了 pgAgent还有几个组件值得说一下。PostGIS 如果你不做地理数据不用装它体积不小而且会往数据库里加几百个函数和类型。pgBouncer 在本地开发环境基本用不上生产环境高并发才需要。Npgsql、pgJDBC、psqlODBC 这些驱动按你的开发语言选不用全装。我个人的习惯是本地开发环境只装 pgAgent其他驱动用的时候再通过 NuGet、Maven、pip 这些包管理器装版本更新更及时。Stack Builder 里的驱动版本往往滞后比如 Npgsql 可能还是半年前的版本。6. 常见问题排查与避坑经验6.1 安装失败和启动失败的典型原因问题一安装到最后一步报“Failed to create service”这个通常是权限问题。确认你是用管理员账户登录的或者右键安装包选择“以管理员身份运行”。另外如果之前装过 PostgreSQL 没卸载干净残留的服务名冲突也会导致失败。解决办法是先在服务列表里删掉旧的postgresql-x64-*服务用sc delete 服务名命令。问题二服务启动后马上停止去看数据目录下的log文件夹找最新的日志文件。常见错误包括could not create shared memory segment内存不足或者shared_buffers设置太大。could not bind to port 5432端口被占用改端口或者停掉占用程序。data directory has wrong ownership数据目录权限不对右键数据目录属性安全确保NETWORK SERVICE或者postgres用户有完全控制权限。问题三psql 连接报“password authentication failed”密码错了或者pg_hba.conf里的认证方式不对。打开数据目录下的pg_hba.conf找到host all all 127.0.0.1/32那一行最后的认证方式应该是scram-sha-256。如果是md5改成scram-sha-256然后重启服务。如果忘了密码临时把这一行改成trust重启用 psql 进去改密码改完再改回scram-sha-256。6.2 性能相关的配置调整装完 PostgreSQL 之后默认配置是给最小硬件环境用的性能很保守。我一般会调整几个关键参数在postgresql.conf里改参数默认值建议值说明shared_buffers128MB内存的 25%共享缓冲区越大缓存越多work_mem4MB16-64MB每个排序/哈希操作的内存maintenance_work_mem64MB256MB-1GB维护操作VACUUM、CREATE INDEX的内存effective_cache_size4GB内存的 50-75%告诉优化器系统缓存大小max_connections100按需调整最大连接数太高会吃内存改完这些参数后重启服务生效。我实测在 16GB 内存的机器上把 shared_buffers 调到 4GBwork_mem 调到 32MB复杂查询的速度能提升 2-3 倍。还有一个 Windows 特有的优化关闭数据目录的 Windows 索引服务。右键数据目录属性高级取消勾选“除了文件属性外还允许索引此文件夹中文件的内容”。这个索引对数据库文件毫无用处只会增加 I/O 负担。6.3 备份与恢复的实操要点PostgreSQL 的备份分逻辑备份和物理备份。逻辑备份用pg_dump物理备份用pg_basebackup。本地开发环境我一般用逻辑备份简单灵活。备份单个数据库pg_dump -U postgres -h localhost -d mydb -F c -f D:\backup\mydb_20250101.backup-F c表示自定义格式压缩比好恢复的时候可以用pg_restore选择性恢复表。恢复pg_restore -U postgres -h localhost -d mydb_new D:\backup\mydb_20250101.backup如果要备份所有数据库用pg_dumpallpg_dumpall -U postgres -h localhost -f D:\backup\all_databases.sql注意pg_dump备份的时候不会阻塞读写但会消耗一定的 I/O 和 CPU。生产环境建议在低峰期做或者用pg_basebackup做物理备份对主库影响更小。我踩过的一个坑用pg_dump备份的时候没加-F c生成的是纯 SQL 文本几百 MB 的文件恢复的时候慢得要命而且中间出错就得从头来。后来改成自定义格式恢复速度快了好几倍还能并行恢复。6.4 常见问题速查表现象可能原因解决方法安装器卡在“Initializing database cluster”杀毒软件拦截临时关闭杀毒软件或把安装目录加白名单服务启动报“could not create any TCP/IP sockets”端口被占用改端口或停掉占用程序pgAdmin 连接超时防火墙拦截在 Windows 防火墙里放行 5432 端口psql 中文乱码客户端编码不对设置PGCLIENTENCODINGUTF8环境变量数据库写入慢杀毒软件实时扫描把数据目录加入杀毒软件排除列表pgAgent 服务启动失败密码错误或数据库连接不上检查 pgAgent 安装命令里的密码和端口Stack Builder 下载失败网络限制手动下载组件安装包7. 我个人的一些使用习惯和技巧装好 PostgreSQL 之后我一般会做几件事让它更好用。第一是建一个自己的普通用户不用 postgres 超级用户做日常开发避免误操作。建用户的 SQLCREATE USER myuser WITH PASSWORD mypassword; CREATE DATABASE mydb OWNER myuser; GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;第二是配置pg_hba.conf让本地连接用 scram-sha-256远程连接按需开放。我一般只允许 127.0.0.1 和局域网网段连接不开放公网。第三是设置一个自动备份任务用 Windows 任务计划程序每天凌晨跑pg_dump备份文件保留最近 7 天。这个用 pgAgent 或者 Windows 自带的计划任务都行我习惯用 Windows 计划任务因为不依赖数据库服务即使数据库挂了备份脚本也能跑虽然会失败但至少有日志。第四是定期跑VACUUM ANALYZE保持统计信息新鲜。PostgreSQL 18 的 autovacuum 已经很强了但大表批量导入后手动跑一次还是有必要的。最后说一个 Windows 上特有的小技巧如果你经常需要切换不同的 PostgreSQL 版本可以用pg_ctl手动管理多个数据目录每个目录对应一个版本端口错开。这样不用装多个服务需要哪个版本就启动哪个。命令是pg_ctl -D D:\pgdata18 -o -p 5432 start pg_ctl -D D:\pgdata17 -o -p 5433 start这样两个版本可以同时跑互不干扰。对于需要测试跨版本兼容性的场景特别有用。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →