pg_upgrade Windows 无法写入日志文件 pg_upgrade_internal.log
pg_upgrade on Windows cannot write to log file pg_upgrade_internal.log
我正在 Windows 2008R2 上尝试 运行 pg_upgrade,但出现错误:
cannot write to log file pg_upgrade_internal.log Failure, exiting
我在 23216734 看到了 Linux 的类似问题,它解释说问题与权限有关,但它对 Windows 没有帮助,因为我没有用户名为 postgres
pg_upgrade docs 也是如此,其中提到了 postgres
用户:
RUNAS /USER:postgres "CMD.EXE"
但同样,我没有这样的用户,我正在尝试 运行 作为管理员执行此命令,所以我不明白为什么我没有权限。我什至尝试做
RUNAS /USER:Administrator "CMD.EXE"
和 运行 pg_upgrade 在新的命令提示符中,但出现相同的错误。
另外,我不确定哪个目录需要权限?试图将 pg_upgrade_internal.log
写入的进程在哪里?
更多详情:
我 运行ning 的命令是:
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
在出现错误的同一命令提示符下,我 运行 执行了以下命令,它们都有效,在各自的目录中创建了一个空文件,因此对传递给 [=58 的目录的写入权限=] 允许:
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
而在我尝试从工作目录 %PGSQL%\bin
运行 pg_upgrade 之前,它没有对所有人的写入权限。
现在我不再收到 cannot write to log file pg_upgrade_internal.log
错误。
docs实际上说pg_upgrade requires write permission in the current directory.
我正在 Windows 2008R2 上尝试 运行 pg_upgrade,但出现错误:
cannot write to log file pg_upgrade_internal.log Failure, exiting
我在 23216734 看到了 Linux 的类似问题,它解释说问题与权限有关,但它对 Windows 没有帮助,因为我没有用户名为 postgres
pg_upgrade docs 也是如此,其中提到了 postgres
用户:
RUNAS /USER:postgres "CMD.EXE"
但同样,我没有这样的用户,我正在尝试 运行 作为管理员执行此命令,所以我不明白为什么我没有权限。我什至尝试做
RUNAS /USER:Administrator "CMD.EXE"
和 运行 pg_upgrade 在新的命令提示符中,但出现相同的错误。
另外,我不确定哪个目录需要权限?试图将 pg_upgrade_internal.log
写入的进程在哪里?
更多详情:
我 运行ning 的命令是:
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
在出现错误的同一命令提示符下,我 运行 执行了以下命令,它们都有效,在各自的目录中创建了一个空文件,因此对传递给 [=58 的目录的写入权限=] 允许:
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
而在我尝试从工作目录 %PGSQL%\bin
运行 pg_upgrade 之前,它没有对所有人的写入权限。
现在我不再收到 cannot write to log file pg_upgrade_internal.log
错误。
docs实际上说pg_upgrade requires write permission in the current directory.