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

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

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


当前回答

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

格式为:

hostname:port:database:username:password

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

chmod 600 ~/.pgpass

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

其他回答

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

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

如本文所述,有两种方法可以非交互式地向PostgreSQL实用程序(如“pg_dump”命令)提供密码:或者使用“PGPASSWORD”环境变量。

对于Windows, pgpass.conf文件应该存在于以下路径:

%APPDATA%\postgresql\pgpass.conf

在我的Windows 10绝对路径上是:

C:\Users\Ognjen\AppData\Roaming\postgresql\pgpass.conf

注意:如果%APPDATA%中没有postgresql文件夹,请创建一个包含pgpass.conf文件的postgresql文件夹。

pgpass.conf的内容可以是:

*:5432:*:*:myDbPassword

或者更具体的内容可以是:

localhost:5432:dbName:username:password

注意:pgpass.conf的内容不能以空格结尾(密码后),否则会出现错误。

这一行帮助我创建一个数据库的转储。

PGPASSWORD="yourpassword" pg_dump -U postgres -h localhost mydb > mydb.pgsql

在windows中,您可以在使用pg_dump.exe之前设置密码变量,并可以在bat文件中自动执行所有操作,例如:

C:\>SET PGPASSWORD=dbpass
C:\>"folder_where_is_pg_dump\pg_dump.exe" -f "dump_file" -h "db_host" -U db_usr --schema "db_schema" "db_name"