Для однострочников, таких как миграция базы данных, вы можете использовать --dbnameстроку подключения (включая пароль), как указано в руководстве по pg_dump
По сути.
pg_dump --dbname=postgresql://username:password@127.0.0.1:5432/mydatabase
Примечание. Убедитесь, что вы используете опцию --dbnameвместо более короткой -dи используете действительный префикс URI, postgresql://или postgres://.
Общая форма URI:
postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]
Лучшая практика в вашем случае (повторяющаяся задача в cron) не должна выполняться из-за проблем безопасности. Если бы не .pgpassфайл, я бы сохранил строку подключения как переменную окружения.
export MYDB=postgresql://username:password@127.0.0.1:5432/mydatabase
тогда есть в вашем crontab
0 3 * * * pg_dump --dbname=$MYDB | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz