3

Я не мог сделать резервную копию, потому что pg_dump показывает следующую ошибку.Ошибка авторизации пароля pg_dump с файлом pgpass.conf в Windows

pg_dump: [archiver (db)] connection to database "mydb" failed: 
FATAL: password authentication failed for user "postgres" 
password retrieved from file 
"C:\Users\MyName\AppData\Roaming\postgresql\pgpass.conf" 

Это мой файл pgpass.

localhost:5432:mydb:postgres:mypassword 

Когда я удалить файл pgpass.conf и запустите файл pg_dump, он запрашивает пароль и резервное копирование выполняется должным образом.

Вот как выглядит сценарий pg_dump.

set PGPASSFILE=%APPDATA%\postgresql\pgpass.conf 
%PG_BIN%pg_dump -h %PG_HOST% -p %PG_PORT% -U %PG_USER% -F c -b -v -f %BACKUP_FILE% %DB% 

Это запланированная задача Windows, поэтому я не хочу, чтобы пользователь вводил пароль.

+0

Какие значения содержат переменные '% PG_PORT%', '% PG_USER%' '% PG_HOST% и'% DB% '? –

+0

Порт поступает из файла реестра. user - postgres, host - localhost, db - mydb – wondie

+0

«* Это запланированная задача Windows *» - под которой пользователь Windows выполняет эту задачу? Это 'MyName'? –

ответ

1

Я нашел проблему. Скрипт, создающий файл pgpass.conf, создал пробел после пароля, и это пространство сделало пароль - mypassword ошибочным. Поэтому, когда я удаляю пространство, он работает правильно!

Сценарий, который создал файл pgpass был:

echo %PG_HOST%:%PG_PORT%:*:%PG_USER%:%PG_PASSWORD% > %PGPASS_FILE% 

Я изменил его к следующему. См. Пробел между PG_PASSWORD% и>.

echo %PG_HOST%:%PG_PORT%:*:%PG_USER%:%PG_PASSWORD%> %PGPASS_FILE% 
+0

На самом деле вам не нужно создавать файл, если в любом случае у вас есть все эти значения в переменных среды. –

+0

Проблема в Windows Server 2012 R2, в файле pgpass.conf нет установленного пароля. Файл есть, но он пуст. – wondie