Есть около 15 баз данных для резервного копирования на ежедневной основе. Пароль установлен для пользователя postgres .
pg_dumpall
выполняется в начале скрипта для полного резервного копирования. pg_dump
в том же сценарии для конкретных баз данных в цикле for.
Поскольку скрипт будет использоваться повторно с использованием crontab, во время выполнения этих команд в качестве дополнительного параметра должна быть передана парольная фраза.
Текущее решение использует .pgpass
(*) с chmod
0600, принадлежащим postgres.
Там, где требуется пароль, каждая команда состоит из:
PGPASSFILE=/path/to/.pgpass <command> <arguments pipes>
Например :
PGPASSFILE=/path/to/.pgpass psql -tl | cut -d '|' -f1 | grep 'dbwildcard'
Одна и та же строка PGPASSFILE имеет префикс перед командами pg_dump
и pg_dumpall
.
- Можно ли сделать это лучше, изящнее, короче?
ПередачаPGPASSFILE=/path/to/.pgpass
строки в переменной прерывает команду. Как насчет безопасности? Лучше или хуже
.pgpass
из настройки файлаpg_hba.conf
:местное все доверие postgres
Там всегда лучший вариант.
Последнее, что, кажется, вакуумный db не работает с PGPASSFILE. Как обойти аргумент пароля в этом случае?
(*) https://www.postgresql.org/docs/current/static/libpq-pgpass.html
https://www.postgresql.org/docs/current/static/app-pg-dumpall.html