¿Cómo pasar la contraseña a pg_dump?
Estoy intentando crear un cronjob para hacer una copia de seguridad de mi base de datos todas las noches antes de que suceda algo catastrófico. Parece que este comando debería satisfacer mis necesidades:
0 3 * * * pg_dump dbname | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz
Excepto que después de ejecutar eso, espera que escriba una contraseña. No puedo hacer eso si lo ejecuto desde cron. ¿Cómo puedo pasar uno automáticamente?
Cree un .pgpass
archivo en el directorio de inicio de la cuenta que pg_dump
se ejecutará como.
El formato es:
hostname:port:database:username:password
Luego, configure el modo del archivo en 0600
. De lo contrario, será ignorado.
chmod 600 ~/.pgpass
Consulte la documentación de Postgresql libpq-pgpass para obtener más detalles.
O puede configurar crontab para ejecutar un script. Dentro de ese script puedes configurar una variable de entorno como esta:
export PGPASSWORD="$put_here_the_password"
De esta manera, si tiene varios comandos que requieren una contraseña, puede ponerlos todos en el script. Si la contraseña cambia solo tienes que cambiarla en un lugar (el script).
Y estoy de acuerdo con Joshua, el uso pg_dump -Fc
genera el formato de exportación más flexible y ya está comprimido. Para obtener más información, consulte: documentación pg_dump
P.ej
# dump the database in custom-format archive
pg_dump -Fc mydb > db.dump
# restore the database
pg_restore -d newdb db.dump