Как я могу передать пароль в pg_dump 10, когда.pgpass в домашнем каталоге не вариант? - PullRequest
0 голосов
/ 06 февраля 2019

Я запускаю задание cron, которое создает дамп базы данных с помощью команды pg_dump, например:

export PGPASSWORD="XXXXXXXX"; pg_dump -h localhost -U my_user my_db > /tmp/db_dump.sql

Но когда я запускаю эту команду, я получаю ошибку аутентификации пароля:

pg_dump: [archiver (db)] connection to database "my_db" failed: FATAL:  password authentication failed for user "my_user"
FATAL:  password authentication failed for user "my_user"

Я не могу поместить файл .pgpass под пользователем, который запускает cron, но я мог бы разместить его в другом месте и указать PGPASSFILE примерно так:

export PGPASSFILE=/path/to/.pgpass; pg_dump -h localhost -U my_user my_db > /tmp/db_dump.sql

Ноопять это возвращает ту же ошибку аутентификации.Я подтвердил, что это не проблема с неправильным паролем, потому что он работает, когда я использую интерактивное приглашение:

pg_dump --password -h localhost -U my_user my_db > /tmp/db_dump.sql
Password: XXXXXXXX

Когда я смотрю на документацию, это выглядит как PGPASSWORD и PGPASSFILE отсутствуют в переменных среды (возможно, они были удалены?) https://www.postgresql.org/docs/10/app-pgdump.html

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

Для контекста я запускаю pg_dump версия 10.6:

pg_dump --version
pg_dump (PostgreSQL) 10.6 (Ubuntu 10.6-0ubuntu0.18.04.1)

1 Ответ

0 голосов
/ 06 февраля 2019

Ваш исходный оператор будет работать, если все $, ?, *, " и \ правильно экранированы.

Лучше всего использовать одинарные кавычки, а не двойные кавычки, как предложено в комментарии a_horse_with_no_name:

export PGPASSWORD='XXXXXXXX'; pg_dump -h localhost -U my_user my_db > /tmp/db_dump.sql

Использование пароля всегда неприятно, потому что оно должно сидеть открытым текстом.

Существуют альтернативы, такие как trust аутентификация (с очень ограниченной pg_hba.conf записью) или проверкой подлинности сертификата.

...