资讯动态

Windows x64 上安装 PostgreSQL 9.1.3 的完整指南与避坑实践

发布时间:2026/10/14 14:46:09 来源:尧图企业网站定制
简介这份资源是面向64位Windows平台的PostgreSQL 9.1.3安装包适合数据库初学者、后端开发人员及需要搭建本地测试环境的IT从业者用于快速部署一套开源关系型数据库系统。压缩包内共2个文件包含1个exe安装程序和1个htm说明文档整体约48.18MBexe用于执行安装流程htm则提供安装指南、系统需求与许可协议等关键信息。该版本发布于2012年具备MVCC多版本并发控制、全文搜索、窗口函数、触发器与存储过程、JSON数据类型、异步复制及PL/pgSQL编程等特性并保持ACID事务兼容可满足复杂查询与高可靠性场景。目前已有796人学习下载读者可借此完成数据库安装配置、创建超级用户、设置端口与网络访问并借助pgAdmin进行建表、导入导出与备份恢复为后续数据库管理与开发打下基础。1. 老版本 PostgreSQL 在 Windows x64 上到底还能不能跑手上有一台内网 Windows Server业务系统只认postgresql-9.1.3-1-windows-x64这个安装包运维群里一问十个人有八个劝你换新版。但现实是老系统的 JDBC 驱动、存储过程语法、甚至某个字段的默认值行为都跟 9.1 绑死了升级不是不能做是排期排到明年。这时候真正的问题不是「该不该用老版本」而是「怎么在 Windows x64 上把它稳稳装起来、跑起来、连得上」。这篇笔记就围绕postgresql-9.1.3-1-windows-x64这个具体安装包展开讲清楚它在现代 Windows 环境下的安装路径、初始化参数、服务注册方式以及用 Navicat 这类客户端连接时最容易翻车的几个点。适合两类人一类是被老系统绑住、必须原地部署 9.1 的运维和开发另一类是想拿老版本做兼容性验证、又不想污染主环境的工程师。新版 PostgreSQL 的安装教程网上已经够多了老版本 x64 安装包在 Windows 上的坑反而没人系统讲。2. 安装包结构与 Windows x64 运行前提先搞清楚你手里的是什么2.1 这个安装包和新版安装器的本质区别postgresql-9.1.3-1-windows-x64是 PostgreSQL 官方在 2012 年前后发布的 Windows 二进制安装包命名规则是「主版本.次版本.修订号-打包序号-windows-架构」。它和现在 PostgreSQL 官网下载页那种带图形化向导的 installer 不是一回事——9.1 时代的 Windows 包更接近「解压即用 手动初始化」的模式安装器本身只负责把二进制文件铺到目标目录数据库集群data 目录需要你自己用initdb生成。这一点非常关键。很多人拿到这个包双击 exe 一路下一步装完发现服务里没有 PostgreSQL或者有服务但连不上就是因为没意识到「装软件」和「建集群」是两步。新版安装器把这两步合并了老版本没有。安装包解压后典型目录结构是这样的目录/文件作用bin/所有可执行文件包括initdb.exe、pg_ctl.exe、psql.exelib/依赖库和扩展模块share/时区、字符集、SQL 脚本等共享资源doc/本地文档uninstall.exe卸载入口bin目录是整个部署的核心后面所有命令都从这里发起。我一般会把这个目录加到系统 PATH或者干脆在命令行里用绝对路径避免版本冲突。2.2 Windows x64 上的依赖与权限前提9.1 时代的二进制包对系统组件有硬依赖缺一个就直接闪退而且报错信息往往很含糊。最常见的是缺Microsoft Visual C 2010 Redistributable (x64)——注意不是 2013 也不是 2015-20229.1 是用 VS2010 工具链编译的。如果你在 Windows 11 或 Server 2022 上部署系统可能已经带了新版运行库但 2010 版不一定有需要单独装。另一个前提是安装路径不能有中文和空格。老版本 PostgreSQL 对路径编码的处理很粗糙C:\Program Files\PostgreSQL\9.1这种带空格的路径在某些子命令里会解析失败。我一般直接装到C:\pgsql91这种短路径省掉后面一堆转义麻烦。权限方面如果你打算把 PostgreSQL 注册成 Windows 服务安装和初始化阶段需要用管理员权限运行命令行。但数据库进程本身不建议用 Administrator 账户跑常见做法是建一个专用的本地用户比如pguser把 data 目录的权限只给这个用户。9.1 在 Windows 上对权限继承比较敏感data 目录如果被其他用户读写启动时会报could not change permissions of directory之类的错。提示在 Windows 11 上部署 9.1 时如果initdb报could not find a suitable encoding先检查系统区域设置里的「非 Unicode 程序语言」是不是中文改成英文美国后重启命令行再试。3. 从 initdb 到服务注册把 9.1 集群在 Windows 上跑起来3.1 用 initdb 生成 data 目录的最小命令假设安装路径是C:\pgsql91data 目录打算放在C:\pgsql91\data用管理员命令行执行cd C:\pgsql91\bin initdb.exe -D C:\pgsql91\data -U postgres -E UTF8 --localeChinese_China.936 -A md5这条命令做了四件事-D指定 data 目录-U指定超级用户名默认是当前 Windows 用户显式指定更可控-E UTF8指定数据库编码--locale指定区域-A md5指定本地认证方式为密码认证。参数说明和常见取值参数含义老版本 Windows 上的注意点-Ddata 目录路径必须为空目录路径不能有中文-U超级用户名不要用中文不要和 Windows 用户名混淆-E数据库编码建议 UTF8和--locale要匹配--locale区域设置中文环境常用Chinese_China.936但和 UTF8 组合时可能报警告-A认证方式md5最通用trust只适合本地调试这里有个经典矛盾--localeChinese_China.936配-E UTF8initdb 会提示 locale 和 encoding 不匹配。9.1 的处理方式是允许你继续但排序规则会按 936 走。如果业务对中文排序不敏感直接用--localeC配 UTF8 最省事避免后续一堆编码告警。执行成功后data 目录里会出现postgresql.conf、pg_hba.conf、PG_VERSION等文件。PG_VERSION里写的是9.1这个文件决定了这个 data 目录只能被 9.1 的二进制读取后面升级大版本时不能直接复用。3.2 注册 Windows 服务并设置开机自启9.1 在 Windows 上注册服务用pg_ctl register不是sc createpg_ctl.exe register -N postgresql-9.1 -D C:\pgsql91\data -S auto -U .\pguser -P 你的密码-N是服务名-D是 data 目录-S auto表示自动启动-U和-P是运行服务的 Windows 账户和密码。注意-U这里填的是 Windows 账户不是数据库的 postgres 用户格式用.\用户名表示本地账户。注册完用net start postgresql-9.1启动。如果启动失败第一件事是看 Windows 事件查看器里的应用程序日志9.1 会把详细错误写进去比命令行直接报的server did not start有用得多。启动成功后用 psql 验证psql.exe -U postgres -h 127.0.0.1 -p 5432 -d postgres能进去就说明集群活了。这时候postgresql.conf里的listen_addresses默认是localhost只允许本机连。要让局域网其他机器连过来改成listen_addresses *同时pg_hba.conf里加一行host all all 0.0.0.0/0 md5然后重启服务。这两步缺一不可只改一个就连不上。3.3 用 Navicat 连接 9.1 时的驱动与认证配置Navicat 连 PostgreSQL 走的是 libpq 协议9.1 的协议版本比较老新版 Navicat 默认的 SSL 设置可能会直接拒绝连接。常见做法是在 Navicat 连接属性里把「SSL」关掉或者把「使用 SSL」设为「不使用」。连接参数填法字段值主机服务器 IP 或 127.0.0.1端口5432默认初始数据库postgres用户名postgres密码initdb 后第一次设的密码如果报authentication failed先确认pg_hba.conf里对应来源的认证方式是md5而不是trust或peer。9.1 的pg_hba.conf修改后需要pg_ctl reload或重启服务才生效reload 对认证配置是够的。注意Navicat 17 及以上版本在连接 9.1 时如果服务端没开 SSL客户端又强制 SSL会报SSL error: wrong version number。解决办法是在连接的高级设置里显式关闭 SSL不要用「自动」。4. 老版本 PostgreSQL 在 Windows 上的避坑与排查4.1 服务启动报「could not create shared memory」现象net start postgresql-9.1失败事件日志里写could not create shared memory segment。原因9.1 在 Windows 上用的是 System V 共享内存的模拟实现shared_buffers设得太大或者系统开了太多其他占共享内存的程序就会分配失败。Windows 上 9.1 的shared_buffers上限比 Linux 低得多。解决把postgresql.conf里的shared_buffers从默认的 32MB 降到 16MB 甚至 8MB重启服务。如果还不行检查max_connections是不是设得过高连接数乘以每连接内存也会吃共享内存。4.2 initdb 报「invalid locale name」现象执行initdb时提示invalid locale name: Chinese_China.936。原因Windows 的区域名称和 PostgreSQL 期望的格式不完全一致9.1 对 locale 名称的解析比较死板某些 Windows 版本上Chinese_China.936不被识别。解决改用--localeC或--localeChinese (Simplified)_China.936或者干脆不指定 locale让 initdb 用系统默认。如果业务必须用中文排序建议在数据库创建时用LC_COLLATE单独指定而不是在 initdb 阶段硬编码。4.3 psql 连接报「no pg_hba.conf entry for host」现象本机 psql 能连局域网其他机器连报no pg_hba.conf entry for host 192.168.x.x。原因pg_hba.conf默认只允许127.0.0.1/32和::1/128没有放行局域网网段。解决在pg_hba.conf末尾加host all all 192.168.0.0/16 md5然后pg_ctl reload -D C:\pgsql91\data。注意 reload 不会断开已有连接但新连接会按新规则走。如果加了还不生效检查是不是改错了文件——9.1 的 data 目录里可能同时存在pg_hba.conf和pg_hba.conf.orig别改到备份文件。4.4 服务账户权限导致 data 目录不可写现象服务能启动但一写数据就报could not open file base/...: Permission denied。原因注册服务时用的 Windows 账户对 data 目录没有写权限或者 data 目录被其他账户占用过NTFS 权限继承乱了。解决右键 data 目录 → 属性 → 安全 → 高级 → 禁用继承 → 删除所有继承的权限然后只给服务账户和 Administrators 完全控制。改完重启服务。9.1 在 Windows 上对权限的检查比新版严格data 目录的 owner 必须和服务运行账户一致。4.5 卸载后残留服务导致重装失败现象卸载 9.1 后重新安装pg_ctl register报service already exists。原因卸载程序没有清理 Windows 服务注册表项服务名还占着。解决用sc delete postgresql-9.1手动删掉残留服务再重新注册。如果sc delete报拒绝访问用管理员命令行执行。删完最好重启一次再装避免句柄没释放。5. 让 9.1 在 Windows 上跑得更稳的几个进阶习惯5.1 用 pg_ctl 做日常启停而不是 net startnet start走的是 Windows 服务控制管理器出错时信息少。日常维护我习惯直接用pg_ctlpg_ctl.exe start -D C:\pgsql91\data -l C:\pgsql91\log\startup.log pg_ctl.exe stop -D C:\pgsql91\data -m fast pg_ctl.exe status -D C:\pgsql91\data-l把启动日志写到文件出问题时直接看这个文件比事件查看器快。-m fast是快速关闭会回滚未提交事务比smart更适合维护窗口。status能告诉你进程 PID 和 data 目录确认服务到底有没有在跑。5.2 定期用 pg_dump 做逻辑备份别只靠文件拷贝9.1 在 Windows 上没有 PITR 的成熟方案物理备份直接拷 data 目录必须停服务而且跨版本不可恢复。我一般配一个每天凌晨的pg_dumppg_dump.exe -U postgres -h 127.0.0.1 -F c -b -v -f C:\backup\pgsql91_%date:~0,4%%date:~5,2%%date:~8,2%.backup postgres-F c是自定义格式支持并行恢复和选择性恢复-b包含大对象-v输出详细过程。备份文件用日期命名保留最近 7 天。恢复时用pg_restore注意 9.1 的pg_restore不能恢复比它新的大版本导出的文件所以备份和恢复必须用同一套二进制。5.3 监控 checkpointer 和后台写进程的状态9.1 的pg_stat_bgwriter视图能看出检查点压力SELECT checkpoints_timed, checkpoints_req, buffers_checkpoint, buffers_clean FROM pg_stat_bgwriter;如果checkpoints_req远大于checkpoints_timed说明max_wal_size9.1 里叫checkpoint_segments设小了检查点被频繁触发I/O 会抖。9.1 的checkpoint_segments默认是 3老硬件上建议调到 10 到 16但别超过 32否则崩溃恢复时间会拉长。这个参数改完需要重启不能 reload。5.4 用 pgAdmin III 而不是新版 pgAdmin 管理 9.1新版 pgAdmin 4 对 9.1 的支持在 2020 年后就陆续断了连上去经常报协议不兼容。9.1 时代的官方客户端是 pgAdmin III虽然界面老但功能完整能管表、看执行计划、导数据。如果只是日常查数据Navicat 够用要做 schema 管理和性能分析pgAdmin III 更稳。我自己的习惯是装完 9.1 后先把pg_hba.conf和postgresql.conf各备份一份到C:\pgsql91\conf_backup每次改配置前先对比 diff。老版本没有ALTER SYSTEM所有参数改动都得手动编辑文件再 reload没有后悔药。这套流程我用了好几年帮好几个内网系统续了命。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑