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.

Другие вопросы по тегам