PostgreSQL 9.4(Windows 7)连接报错:无法打开文件base\12135\11946
解决PostgreSQL 9.4在Windows 7上的"base\12135\11946文件缺失"连接错误
你碰到的这个FATAL:could not open file"base\12135\11946":No such file or directory错误,本质是PostgreSQL在尝试访问某个数据库对象(可能是表、索引甚至临时文件)对应的物理文件时,发现文件要么丢失了,要么损坏了。常见诱因包括异常关机、磁盘IO故障、误删数据目录里的文件,或者磁盘空间不足导致文件未完整写入就中断了。下面是一步步的排查和解决办法:
第一步:确认文件是否真的缺失
- 找到PostgreSQL的数据目录(默认路径一般是
C:\Program Files\PostgreSQL\9.4\data,如果安装时修改过路径就找你当时选择的位置) - 进入
base\12135子目录,查看是否存在11946这个文件- 如果是不小心移走了,把它移回原目录后重启PostgreSQL服务试试
- 如果确实找不到这个文件,继续往下排查
第二步:检查PostgreSQL服务状态
- 按下
Win + R,输入services.msc打开服务管理器 - 找到
postgresql-x64-9.4(32位系统对应服务名为postgresql-9.4),确认服务是否处于运行状态- 如果服务未启动,尝试手动启动;若启动失败,继续下一步排查
第三步:优先通过备份恢复(最安全的方案)
如果你之前有定期备份数据库的习惯,直接执行以下步骤:
- 停止PostgreSQL服务
- 将当前的数据目录重命名(比如改成
data_old),避免覆盖原数据 - 新建一个空的
data目录,用initdb命令初始化:"C:\Program Files\PostgreSQL\9.4\bin\initdb.exe" -D "C:\Program Files\PostgreSQL\9.4\data" - 启动服务,然后用
pg_restore恢复备份文件:"C:\Program Files\PostgreSQL\9.4\bin\pg_restore.exe" -d 你的数据库名 备份文件的完整路径
第四步:无备份时尝试修复(存在数据丢失风险,谨慎操作)
注意:操作前务必将当前的data目录完整复制一份做备份!
- 停止PostgreSQL服务
- 以管理员身份打开命令提示符,切换到PostgreSQL的bin目录:
cd "C:\Program Files\PostgreSQL\9.4\bin" - 执行事务日志重置命令,强制跳过损坏的文件记录:
pg_resetxlog.exe -f "C:\Program Files\PostgreSQL\9.4\data" - 尝试启动服务,如果能成功启动,立即对所有数据库做全量备份,之后建议尽快升级到受支持的PostgreSQL版本(9.4已停止维护)
第五步:检查磁盘健康状况
文件莫名丢失也可能是磁盘存在坏道导致的:
- 打开
我的电脑,右键点击PostgreSQL数据所在磁盘,选择属性->工具->检查 - 运行磁盘检查工具,修复潜在的磁盘错误,防止后续再出现类似问题
最后提醒:PostgreSQL 9.4是2014年发布的老旧版本,2020年已停止所有维护,不仅存在安全隐患,遇到问题也难以获得官方支持,建议尽快升级到12及以上的受支持版本,同时一定要养成定期备份数据库的习惯,避免数据丢失。
内容的提问来源于stack exchange,提问作者Swaroop chandan reddy p
相关产品推荐
相关产品推荐

