Search code examples
bashpostgresqlshellcron

How to pass in password to pg_dump?


I'm trying to create a cronjob to back up my database every night before something catastrophic happens. It looks like this command should meet my needs:

0 3 * * * pg_dump dbname | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz

Except after running that, it expects me to type in a password. I can't do that if I run it from cron. How can I pass one in automatically?


Solution

  • Create a .pgpass file in the home directory of the account that pg_dump will run as.

    The format is:

    hostname:port:database:username:password
    

    Then, set the file's mode to 0600. Otherwise, it will be ignored.

    chmod 600 ~/.pgpass
    

    See the Postgresql documentation libpq-pgpass for more details.