pg_dump с флагом -w не читает из файла .pgpass

pg_dump с флагом -w не читает из файла .pgpass

Я пытаюсь сделать резервную копию моей базы данных PostgreSQL под названиемcrewdbв Ubuntu 18.04 LTS из скрипта со следующей командой:

pg_dump -h localhost -p 5432 -U postgres -w -C -F p -b -v -f ~/Dropbox\/postgres_backup/crewdb.backup.sql crewdb

Я знаю, что скрипт, в котором выполняется указанная выше команда, сам по себе работает. Когда я запускаю указанную выше команду с -W вместо -w, мне предлагается ввести пароль, и резервное копирование проходит нормально. Я пытаюсь автоматизировать эту команду в скрипте и хочу, чтобы резервное копирование продолжалось без запроса пароля, поэтому с флагом -w. Для этого я создал следующий файл

/home/chh1/.pgpass

Когдаls -la ~/.pgpass

-rw------- 1 chh1 chh1 74 Oct 15 10:00 .pgpass

Внутри файла .pgpass я поместил следующий текст:

# Server:Port:Database:Username:Password

*:*:crewdb:postgres:9Gh#$mq

Однако при запуске команды я получаю следующую ошибку и резервное копирование завершается неудачей:

pg_dump -h localhost -p 5432 -U postgres -w -C -F p -b -v -f ~/Dropbox\/postgres_backup/crewdb.backup.sql crewdb

pg_dump: [archiver (db)] connection to database "crewdb" failed: FATAL: password authentication failed for user "postgres" password retrieved from file "/home/chh1/.pgpass" FATAL: password authentication failed for user "postgres" password retrieved from file "/home/chh1/.pgpass"

Я буду очень признателен, если кто-нибудь здесь сможет направить меня на верный путь!

решение1

Ответ на этот вопрос найден.

При беге

hexdump -C ~/.pgpass

Я получил следующий результат:

00000000  23 20 68 6f 73 74 6e 61  6d 65 3a 70 6f 72 74 3a  |# hostname:port:|
00000010  64 61 74 61 62 61 73 65  3a 75 73 65 72 6e 61 6d  |database:usernam|
00000020  65 3a 70 61 73 73 77 6f  72 64 0a 2a 3a 2a 3a 63  |e:password.*:*:c|
00000030  72 65 77 64 62 3a 70 6f  73 74 67 72 65 73 3a 39  |rewdb:postgres:9|
00000040  47 68 23 24 6d 71 20 0a                           |Gh#$mq .|
00000048

В пятой строке было указано 20, указывающее на пробел в конце пароля, но перед концом строки, что указывает на то, что в конце пароля есть пробел, которого там быть не должно. После удаления пробела команда выполнилась без запроса пароля.

Ответ на этот вопрос предоставил Даниэль Верите из ServerVault.

Связанный контент