Pg 安装:“数据库集群初始化失败”

Cel*_*tas 6 postgresql windows command-line

注意:这个问题已经完全改写了原来的形式,所以它反映了实际问题,并将帮助其他人找到相同问题的解决方案)。


我仍然无法在我的 Windows 7 Ultimate x64 计算机上成功安装 PostgreSQL。有关一些历史,请参阅此先前问题

我做了一个新的 9.2 版本,我得到的唯一错误是这个:

安装错误

它写道:

“运行安装后步骤时出现问题。安装可能无法正确完成。数据库集群初始化失败”。

即使在我完全手动卸载 PostgreSQL 和 pgAmdin-III 之后,也会发生这种情况:

  • 运行 PostgreSQL 卸载程序,失败并显示错误Error stopping service postgresql-x64-9.2
  • 删除了所有的PostgreSQL相关的注册表PostgreSQL的条目HKEY_LOCAL_MACHINE\SOFTWAREHKEY_CURRENT_USER\SOFTWARE
  • 删除了在管理员命令提示符中postgres使用的用户帐户net user postgres /delete(在开始菜单中右键单击“命令提示符”,选择“以管理员身份运行”)
  • 删除了postgres用户配置文件
  • 删除C:\Program Files\PostgreSQL\目录,包括%appdata%内的数据目录
  • 删除了一些指向 PostgreSQL 的 PgAdmin-III 注册表项
  • 删除了 postgres 的服务帐户 services.msc

当我重新启动并再次尝试安装程序时,它失败并显示相同的消息。

来自的install-postgresql.log文件%TEMP%包含:

Executing cscript //NoLogo "C:\Program Files\PostgreSQL\9.2/installer/server/initcluster.vbs" "NT AUTHORITY\NetworkService" "postgres" "****" "C:\Program Files\PostgreSQL\9.2" "C:\Program Files\PostgreSQL\9.2\data" 5432 "DEFAULT"
Script exit code: 1
Run Code Online (Sandbox Code Playgroud)

稍后又出现另一个错误:

creating template1 database in C:/Program Files/PostgreSQL/9.2/data/base/1 ... initdb: could not execute command ""C:/Program Files/PostgreSQL/9.2/bin/postgres.exe" --boot -x1 -F ": No error
Run Code Online (Sandbox Code Playgroud)

在此处查看完整的安装程序日志文件下载

Cra*_*ger 6

看来这个问题的根本原因可能是@Celeritas 的计算机的COMSPEC环境变量值不正确。它有一个尾随分号,而不是正常的:

C:\Windows\system32\cmd.exe
Run Code Online (Sandbox Code Playgroud)

它是:

C:\Windows\system32\cmd.exe;
Run Code Online (Sandbox Code Playgroud)

这个一字之差就够了。以上不是有效的命令提示符路径,因此popen()调用失败。不幸的是,而不是像这样有用的东西:

'"C:\Windows\system32\cmd.exe;"' is not recognized as an internal or external command, operable program or batch file
Run Code Online (Sandbox Code Playgroud)

相反,它报告了令人愉快的有用错误No error

initdb: could not execute command ""C:/Program Files/PostgreSQL/9.2/bin/postgres.exe" --boot -x1 -F ": No error
Run Code Online (Sandbox Code Playgroud)

见相关:

我已将此报告给安装程序团队编写了一个 wiki 条目来描述它。请参阅博客文章

问题最终通过以下方式解决:

  • 编辑COMSPEC环境变量
  • 卸载 PostgreSQL
  • 重启
  • 重新安装 PostgreSQL

尽管在此之前还有很多实际上不需要解决此问题,包括手动完全手动干净卸载 PostgreSQL。

现在我只想找到编写修改这个环境变量的程序的人。