【发布时间】:2016-04-12 09:06:51
【问题描述】:
我正在尝试在 Windows 2008R2 上运行 pg_upgrade,但出现错误:
无法写入日志文件 pg_upgrade_internal.log 失败,退出
我在23216734 看到了一个类似的 Linux 问题,它解释了问题在于权限,但它对 Windows 没有帮助,因为我没有名为 postgres 的用户
pg_upgrade docs 也是如此,其中提到了 postgres 用户:
RUNAS /USER:postgres "CMD.EXE"
但同样,我没有这样的用户,并且试图以管理员身份运行此命令,所以我不明白为什么我没有权限。我什至试着做
RUNAS /USER:Administrator "CMD.EXE"
并在新的命令提示符下运行 pg_upgrade,但得到同样的错误。
另外,我不确定哪个目录需要权限?尝试将pg_upgrade_internal.log 写入的进程在哪里?
更多细节:
我正在运行的命令是:
C:\Apps\postgresql\pgsql-9.5.0\bin>pg_upgrade.exe --old-datadir=E:\PGSQL_data --new-datadir=E:\PGSQLData\pgsql-9.5 --old-bindir=C:\Apps\postgresql\pgsql-9.4.5.3\bin --new-bindir=C:\Apps\postgresql\pgsql-9.5.0\bin
从给出错误的同一命令提示符中,我运行了以下命令,它们都工作了,在各自的目录中创建了一个空文件,因此允许对传递给 pg_upgrade 的目录的写入权限:
C:\Apps\postgresql\pgsql-9.5.0\bin>type nul > E:\PGSQL_data\_test_write_permission.txt
C:\Apps\postgresql\pgsql-9.5.0\bin>type nul > E:\PGSQLData\pgsql-9.5\_test_write_permission.txt
C:\Apps\postgresql\pgsql-9.5.0\bin>type nul > C:\Apps\postgresql\pgsql-9.4.5.3\bin\_test_write_permission.txt
C:\Apps\postgresql\pgsql-9.5.0\bin>type nul > C:\Apps\postgresql\pgsql-9.5.0\bin\_test_write_permission.txt
所以现在我比以前更困惑了……
更多细节:
我看到创建内部日志文件的命令在/src/bin/pg_upgrade/option.c#L101
调用fopen_priv(INTERNAL_LOG_FILE, "a") 定义在
/src/bin/pg_upgrade/file.c#L243
但我不确定它试图写入哪个目录。如果我知道,那么我可以检查该目录的权限。
有什么想法吗?
【问题讨论】:
-
请向我们展示用于运行
pg_upgrade的完整命令行。您不应该以管理员身份运行它,普通用户就足够了,但您必须确保正确设置两个数据目录的访问权限! -
@a_horse_with_no_name - 我更新了问题以显示完整的命令行。我以管理员身份登录到 Windows,因此用户帐户应该可以访问这些目录。你知道 pg_upgrade 会尝试将 pg_upgrade_internal.log 保存到哪里吗?
-
不知道。我刚刚使用普通用户帐户从 9.4 升级到 9.5,一切正常,所以我猜该文件存储在当前用户的某个临时目录中。我不得不引用
.exe的路径,并且我使用了错误的引用路径的方式,这导致了非常奇怪的错误。这就是我要求完整命令的原因。 -
@a_horse_with_no_name 当我在其他 PG 工具上引用路径时,例如
initdb它失败了,所以我尽量避免这种情况。为了更好地衡量,我现在尝试引用所有路径,并将 `` 分隔符更改为 '/',但我仍然遇到相同的错误。
标签: windows postgresql windows-server-2008-r2 pg-upgrade