pg_upgrade в Windows не может записать в файл журнала pg_upgrade_internal.log
Я пытаюсь запустить pg_upgrade в Windows 2008R2, но получаю сообщение об ошибке:
невозможно записать в файл журнала pg_upgrade_internal.log Сбой, выход
Я видел похожий вопрос для Linux на 23216734, который объясняет, что проблема связана с разрешениями, но это не помогает с Windows, так как у меня нет пользователя с именем postgres
То же самое касается документов pg_upgrade, в которых упоминается 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
Но я не уверен, в какой каталог он пытается записать. Если бы я знал это, я мог бы проверить разрешения для этого каталога.
Есть идеи?
1 ответ
Таким образом, комментарий исходного кода в /src/bin/pg_upgrade/file.c#L243 /* 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.