如何将密码传递给pg_dump?

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

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

除了运行后,它希望我input一个密码。 如果我从cron运行它,我不能这样做。 我怎么能自动通过一个?

在pg_dump将运行的帐户的主目录中创build一个.pgpass文件:有关格式的详细信息,请参阅http://www.postgresql.org/docs/current/static/libpq-pgpass.html (包括最后一段在这里解释它将被忽略,如果你没有设置模式为0600)。

或者你可以设置crontab来运行一个脚本。 在这个脚本里面你可以像这样设置一个环境variables: export PGPASSWORD="$put_here_the_password"

这样,如果你有多个需要密码的命令,你可以把它们全部放在脚本中。 如果密码更改,则只需在一个地方更改(脚本)。

我同意约书亚,使用pg_dump -Fc生成最灵活的导出格式,并已压缩。 欲了解更多信息,请参阅: pg_dump文档

例如

 # dump the database in custom-format archive pg_dump -Fc mydb > db.dump # restore the database pg_restore -d newdb db.dump 

如果你想用一个命令来做:

 PGPASSWORD="mypass" pg_dump mydb > mydb.dump 

对于单线程,如迁移数据库,可以使用--dbname后跟一个连接string(包括密码),如pg_dump手册中所述

在本质上。

pg_dump --dbname=postgresql://username:password@127.0.0.1:5432/mydatabase

注意:请确保使用选项--dbname而不是--dbname -d并使用有效的URI前缀postgresql://postgres://

一般的URIforms是:

postgresql://[user[:password]@][netloc][:port][/dbname][?param1=value1&...]

在你的情况下最好的做法(在cron中的重复任务)这不应该由于安全问题。 如果它不是.pgpass文件,我会将连接string保存为一个环境variables。

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

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

如果我错了,纠正我,但如果系统用户与数据库用户相同,PostgreSQL将不会要求input密码 – 它依赖于系统进行身份validation。 这可能是一个configuration问题。

因此,当我希望数据库所有者postgres每天晚上备份他的数据库时,我可以为它创build一个crontab: crontab -e -u postgres 。 当然, postgres需要被允许执行cron作业; 因此它必须列在/etc/cron.allow ,否则/etc/cron.deny必须为空。

@Josue亚历山大Ibarra答案工作在centos 7和9.5版本,如果–dbname没有通过。

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

另一个(可能不安全)的方式来传递密码是使用inputredirect即调用

pg_dump [params] < [path to file containing password]

在我看来,这是最简单的方法:你编辑你的主要postgresconfiguration文件: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 > /backup/db/$(date +%Y-%m-%d).psql.gz

它没有密码工作