我试图在Windows2008R2上运行pg_upgrade,但是我得到了错误:
无法写入日志文件pg_upgrade_internal.log失败,退出
我在23216734上看到了一个类似的问题,它解释了这个问题与权限有关,但是它对postgres没有帮助,因为我没有一个名为postgres的用户
升级文档也是如此,它提到了一个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所以现在我比以前更困惑..。
更多细节:
我看到创建内部日志文件的命令位于升级/选择.c#L 101
调用在fopen_priv(INTERNAL_LOG_FILE, "a")上定义的升级/文件c#L 243
但我不确定它想要写哪个目录。如果我知道这一点,那么我可以检查该目录的权限。
有什么想法吗?
发布于 2016-01-10 03:48:53
因此,升级/文件c#L 243 /* fopen() file with no group/other permissions */的源代码评论给了我一个想法。
我在C:\temp创建了一个临时文件夹,并向每个人授予写权限,然后从该目录运行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错误了。
文档说的是pg_upgrade requires write permission in the current directory.
https://stackoverflow.com/questions/34664236
复制相似问题