我正试着创建一个cronjob,在灾难发生之前每晚备份我的数据库。看起来这个命令应该能满足我的需求:

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

只是在运行之后,它要求我输入密码。如果我从cron运行它,我就做不到这一点。我怎样才能自动输入一个?


当前回答

在我看来,最简单的方法是: 编辑postgres主配置文件:pg_hba.conf 在这里你必须添加以下一行:

Host <you_db_name> <you_db_owner> 127.0.0.1/32 trust

在这之后,你需要这样开始你的cron:

pg_dump - h 127.0.0.1 - u < you_db_user > < you_db_name > | gzip > /备份/ db /美元(日期+ Y % - % - % d) .psql.gz

而且它不需要密码就能工作

其他回答

@Josue Alexander Ibarra回答适用于centos 7和9.5版本 如果——dbname没有被传递。

pg_dump postgresql://username:password@127.0.0.1:5432/mydatabase 

你只需要打开pg_hba.conf并在所有方法中设置信任。这对我来说很合适。因此,安全是空的。

在pg_dump将运行的帐户的主目录中创建一个.pgpass文件。

格式为:

hostname:port:database:username:password

然后,将文件模式设置为0600。否则,它将被忽略。

chmod 600 ~/.pgpass

更多细节请参阅Postgresql文档libpq-pgpass。

注意,在windows中,pgpass.conf文件必须在以下文件夹中:

%APPDATA%\postgresql\pgpass.conf

如果%APPDATA%文件夹中没有postgresql文件夹,创建它。

pgpass.conf文件内容如下:

localhost:5432:dbname:dbusername:dbpassword

干杯

$ PGPASSWORD="mypass" pg_dump -i -h localhost -p 5432 -U username -F c -b -v -f dumpfilename.dump databasename