Windows 上的 pg_upgrade 无法写入日志文件 pg_upgrade_internal.log

2023-11-28

我尝试在 Windows 2008R2 上运行 pg_upgrade,但收到错误:

无法写入日志文件 pg_upgrade_internal.log 失败,正在退出

我在 Linux 上看到了类似的问题23216734这说明问题与权限有关,但它对 Windows 没有帮助,因为我没有名为的用户postgres

同样适用于pg_upgrade 文档,其中提到了一个postgres user:

RUNAS /用户:postgres“CMD.EXE”

但同样,我没有这样的用户,并且正在尝试以管理员身份运行此命令,所以我不明白为什么我没有权限。我什至尝试做

RUNAS /USER:Administrator "CMD.EXE"

并在新的命令提示符中运行 pg_upgrade,但出现相同的错误。

另外,我不确定哪个目录需要权限?进程尝试写入的位置在哪里pg_upgrade_internal.log to?


更多细节:

我正在运行的命令是:

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

但我不确定它试图写入哪个目录。如果我知道的话,我可以检查该目录的权限。

有任何想法吗?


所以源代码注释在/src/bin/pg_upgrade/file.c#L243 /* fopen() file with no group/other permissions */给了我一个主意。

我在 C:\temp 创建了一个临时文件夹并给出了Write权限Everyone,然后从该目录运行 pg_upgrade,即

C:\temp>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 之前%PGSQL%\bin其中没有对每个人的写入权限。

现在我不明白cannot write to log file pg_upgrade_internal.log不再出错了。

The docs实际上说pg_upgrade requires write permission in the current directory.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Windows 上的 pg_upgrade 无法写入日志文件 pg_upgrade_internal.log 的相关文章

随机推荐