Назад | Перейти на главную страницу

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

Я пытаюсь создать резервную копию своей базы данных PostgreSQL под названием teamdb в 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) Создайте файл .pgpass с содержимым

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

2) установите разрешения с помощью команды

 sudo chmod 600 .pgpass

3) Установите владельцем файла того же пользователя, с помощью которого вы вошли в систему:

sudo chown chh1:chh1 .pgpass

4) Установите переменную среды PGPASSFILE:

 export PGPASSFILE='/home/chh1/.pgpass'

Теперь при проверке с

psql -h localhost -U postgres crewdb

Получаю аналогичную ошибку:

psql: 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"

Ниже приведены настройки в моем файле pg_hba.conf:

# Database administrative login by Unix domain socket
local   all             postgres                                md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            md5
host    replication     all             ::1/128                 md5

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

Шестнадцатеричный дамп .pgpass показывает, что есть пробел (20) сразу после пароля и до конца строки:

47 68 23 24 6d 71 20 0a |Gh#$mq .

Это пространство необходимо удалить, иначе оно будет считаться частью пароля.