ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

PostgreSQL 9.1.3 Windows 64位安装包:安装、配置与避坑指南

PostgreSQL 9.1.3 Windows 64位安装包:安装、配置与避坑指南

简介:这份资源是面向64位Windows平台的PostgreSQL 9.1.3安装包,适合数据库初学者、运维人员及需要搭建本地关系型数据库环境的开发者。PostgreSQL作为开源RDBMS,以高可靠性和复杂查询能力见长,该版本发布于2012年,集成了MVCC并发控制、全文搜索、窗口函数、触发器与存储过程、JSON数据类型、异步复制及PL/pgSQL编程语言等特性,并保持ACID事务兼容,可用于业务系统开发、数据检索与负载均衡等场景。压缩包共2个文件,包含1个exe安装程序和1个htm说明文档,整体约48.18MB,安装程序用于部署数据库服务,说明文档则提供安装指引与配置参考。目前已有796人学习下载,读者可借此快速完成本地环境搭建,并对照文档了解端口、数据目录与超级用户等关键配置,为后续表结构设计、数据导入导出和备份恢复打下基础。

1. 为什么还有人专门找 postgresql-9.1.3-1-windows-x64 这个老安装包

如果你手上有一台必须跑 Windows 的老业务机,或者要复现一份十年前的数据库实验环境,那你大概率会撞上postgresql-9.1.3-1-windows-x64这个文件名。它不是最新版,官方主站早就把它挪进了历史归档,但它在特定场景里仍然有用:老项目的 SQL 脚本依赖 9.1 的语法行为、某些遗留客户端只认这个协议版本、教学环境要求版本对齐。这个资源就是 PostgreSQL 9.1.3 的 Windows 64 位一键安装包,装完自带 pgAdmin、命令行 psql 和一套默认服务配置。适合谁?需要精确复现旧环境的后端、运维、数据迁移人员,以及被“版本必须一致”卡住的开发者。下面我按实际拆包和安装的顺序,把能抄的步骤和会翻车的地方都写清楚。

2. 安装包拆开看:目录结构、组件与版本边界

2.1 安装包里到底装了什么

把postgresql-9.1.3-1-windows-x64.exe跑起来之前,先明白它是个图形化安装器,不是绿色解压包。安装完成后,默认路径通常是C:\Program Files\PostgreSQL\9.1\,里面几个关键目录决定了你后面怎么用:

目录作用实际会碰到的文件
bin所有可执行程序psql.exe、pg_ctl.exe、initdb.exe、pg_dump.exe
data数据库集群数据文件postgresql.conf、pg_hba.conf、PG_VERSION
lib动态链接库依赖的 VC++ 运行库相关 dll
share时区、字符集、扩展 SQLtimezone、extension目录
pgAdmin III图形客户端pgadmin3.exe

这个版本对应的是 PostgreSQL 9.1 系列,服务名默认叫postgresql-9.1,端口默认 5432。注意它和现在主流的 15、16 在配置项命名上有差异,比如wal_level的取值、archive_mode的行为,直接拿新版配置文件覆盖会起不来。

2.2 为什么是 9.1.3 而不是更新的小版本

9.1 系列最后一个版本是 9.1.24,但很多人手里只有 9.1.3 这个安装包。原因通常是当年随某个商业软件附带的介质,或者从旧镜像站扒下来的。从功能边界看,9.1 引入了serializable隔离级别的 SSI 实现、unlogged表、CREATE EXTENSION机制,这些在 9.1.3 里已经具备。但 9.1.3 之后修复的若干崩溃和 WAL 回放问题它没有,所以只建议在隔离环境或非核心业务上用。如果你只是要跑通一个老项目的建表脚本,9.1.3 够用;如果要长期存数据,至少升到 9.1 的末期小版本,或者干脆迁到新版。

2.3 安装前的系统依赖检查

Windows 64 位系统上,这个安装包依赖 Microsoft Visual C++ 2010 Redistributable。很多新机器(尤其是 Windows 10/11 干净系统)没装这个运行库,安装器会在初始化集群阶段直接报错退出,日志里写could not load library之类。常见做法是先装vcredist_x64.exe(2010 版),再跑 PostgreSQL 安装器。另外,安装账户不要用中文用户名,initdb阶段对路径里的非 ASCII 字符处理不完善,容易在data目录初始化时失败。

提示:安装前把杀毒软件实时防护临时关掉,部分安全软件会拦截initdb.exe写注册表和创建服务。

3. 一步步装起来:从 exe 到能连上的完整操作

3.1 图形化安装的关键选项怎么填

双击安装包后,除了路径和端口,真正影响后续使用的是这几项:

  • Data Directory:默认在安装目录下的data。如果你打算把数据放独立盘,这里改掉,但路径不要有空格和中文。
  • Locale:选C或者Chinese (Simplified)_China.936。选C排序行为最接近老 Unix 环境,选中文 locale 则ORDER BY中文排序更符合直觉。老项目迁移时,locale 不一致会导致索引和排序结果不同,这是血泪经验。
  • Superuser Password:设一个你记得住的,后面pg_hba.conf默认是md5认证,忘了只能改配置文件重来。
  • Port:5432 被占用就换 5433,但换完记得所有连接串同步改。

安装器最后会问是否启动 Stack Builder,这个版本里 Stack Builder 能装的扩展很少,直接跳过,需要什么扩展后面手动CREATE EXTENSION。

3.2 验证服务与命令行连接

装完后,服务应该自动启动。用管理员权限打开 cmd,进到bin目录:

cd "C:\Program Files\PostgreSQL\9.1\bin" pg_ctl status -D "C:\Program Files\PostgreSQL\9.1\data"

正常会输出pg_ctl: server is running。如果没起来,用pg_ctl start -D ...手动拉,看控制台报什么错。接着用 psql 连:

psql -U postgres -h 127.0.0.1 -p 5432 -d postgres

输入安装时设的密码,进去后执行SELECT version();,应该返回PostgreSQL 9.1.3, compiled by Visual C++ build 1500, 64-bit。这一步能过,说明二进制和集群都没问题。如果报could not connect to server,先查 Windows 服务列表里postgresql-9.1是否在运行,再看data\pg_log下最新的日志文件。

3.3 改监听地址和认证方式

默认postgresql.conf里listen_addresses = 'localhost',只允许本机连。要让局域网其他机器连,改成listen_addresses = '*',然后改pg_hba.conf,在文件末尾加一行:

host all all 192.168.1.0/24 md5

这行的含义是:允许192.168.1.0/24网段用密码认证连所有库。改完两个文件都要重启服务:pg_ctl restart -D "C:\Program Files\PostgreSQL\9.1\data"。注意 9.1 的pg_hba.conf不支持scram-sha-256,只能md5或trust,别照抄新版的配置。

3.4 用 pg_dump 和 psql 做一次最小备份恢复

装完先验证备份链路能不能走通,这是老版本最容易被忽略的环节:

pg_dump -U postgres -h 127.0.0.1 -p 5432 -F c -b -v -f "D:\backup\test.backup" postgres

参数说明:-F c表示自定义格式,压缩且支持并行恢复;-b包含大对象;-v输出详细过程;-f指定输出文件。恢复时先建空库再pg_restore:

createdb -U postgres -h 127.0.0.1 -p 5432 test_restore pg_restore -U postgres -h 127.0.0.1 -p 5432 -d test_restore -v "D:\backup\test.backup"

如果pg_restore报扩展不存在,比如plpgsql之外的扩展,需要先在目标库CREATE EXTENSION。9.1.3 自带的扩展不多,uuid-ossp、pgcrypto这些要确认share\extension下有对应控制文件。

4. 避坑排查:9.1.3 在 Windows 上最容易翻车的五件事

4.1 安装到最后一步报“初始化数据库集群失败”

现象:进度条走到Initializing database cluster卡住,然后弹窗失败,安装回滚。原因:九成是缺 VC++ 2010 运行库,或者data目录路径含中文/空格,再或者当前用户对目标目录没有写权限。解决:先装vcredist_x64.exe(2010),把安装路径改成纯英文无空格,用管理员账户运行安装器。如果还不行,看%TEMP%下install-postgresql.log,里面会写具体是哪个 dll 加载失败。

4.2 服务启动后立刻停止,日志报“could not create shared memory”

现象:pg_ctl start显示启动成功,几秒后进程消失,pg_log里写共享内存相关错误。原因:Windows 上shared_buffers设得过大,或者被杀毒软件拦截了内存映射。9.1 在 64 位 Windows 上对shared_buffers的实际上限受max_connections和内核参数影响。解决:把postgresql.conf里shared_buffers降到128MB试起,确认能起来再逐步加。同时把 PostgreSQL 安装目录加入杀毒软件白名单。

4.3 psql 连不上,报“no pg_hba.conf entry for host”

现象:本机psql -h 127.0.0.1能连,换局域网 IP 或-h 0.0.0.0就报这个。原因:pg_hba.conf里没有对应网段的条目,或者listen_addresses没放开。解决:确认postgresql.conf的listen_addresses包含目标地址,然后在pg_hba.conf加对应host行。改完必须pg_ctl reload或重启,reload 对pg_hba.conf生效,对listen_addresses不生效,后者必须重启。

4.4 中文数据插入后查询乱码

现象:用psql插入中文正常,用 pgAdmin 查出来是问号,或者反过来。原因:客户端编码和服务端编码不一致。9.1 安装时如果 locale 选了C,默认库编码可能是SQL_ASCII,不校验字符集,存进去是什么字节读出来就是什么字节,但客户端按 UTF-8 解释就乱。解决:建库时显式指定ENCODING 'UTF8' LC_COLLATE 'C' LC_CTYPE 'C' TEMPLATE template0。已经建好的库可以用pg_dump导出后重建再导入。客户端侧设PGCLIENTENCODING=UTF8环境变量。

4.5 用 Navicat 等第三方客户端连不上或功能异常

现象:Navicat 能连上但看不到某些系统表,或者执行 SQL 报协议错误。原因:9.1 的pg_catalog结构和新版差异较大,部分新版客户端默认按高版本协议探测。另外 9.1 不支持scram-sha-256,如果客户端强制用这种认证也会失败。解决:在客户端连接设置里把认证方式显式设为md5,并关闭“使用高级协议特性”之类的选项。如果只是做数据浏览,用安装自带的 pgAdmin III 最稳,它和 9.1 是同期产物,兼容性最好。

5. 让 9.1.3 跑得更稳:参数微调与迁移前的验证习惯

装好只是开始,9.1.3 在 Windows 上的默认参数偏保守,稍微调几项能明显减少后期麻烦。postgresql.conf里我一般会先动这三个:shared_buffers设为系统内存的 15% 到 25%,但不超过 512MB,再大在 32 位进程模型下有风险;work_mem从默认 1MB 提到 4MB 到 8MB,减少复杂排序落盘;maintenance_work_mem提到 64MB,加快VACUUM和建索引。改完用pg_ctl restart重启,然后跑一次SELECT * FROM pg_settings WHERE name IN ('shared_buffers','work_mem');确认生效。

另一个习惯是每次动数据前先做逻辑备份验证。9.1.3 的pg_dump对自定义格式支持没问题,但恢复时如果目标库的search_path和源库不同,函数和操作符可能找不到。我的做法是备份完立刻在另一个库pg_restore一遍,确认无报错再继续。这个动作花不了几分钟,但能避免“备份文件打不开”这种没有后悔药的情况。

如果你打算把这个版本的数据迁到新版 PostgreSQL,不要直接物理拷贝data目录,版本跨度太大,pg_upgrade也不支持从 9.1 直接跳到 15 以上。稳妥路线是:在 9.1.3 上用pg_dump -F c导出,在新版上用pg_restore导入,导入后重点检查serial列、bytea字段和自定义函数的LANGUAGE声明。我见过太多人卡在plpgsql函数里的RETURNS SETOF语法在新版行为微调上,所以导入后跑一遍业务查询回归,比什么都强。

从那以后我每次拿到这种老版本安装包,都强制先在一台干净虚拟机上完整走一遍安装、连接、备份、恢复,确认链路通了再碰真实数据。希望帮到你。

本文还有配套的精品资源,点击获取

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进