我在/folder/.pgpass中放入了一个.pgpass文件,看起来像这样
*:*:*:postgres:password_for_postgres
我有一个bash脚本,我从postgreSQL备份数据库:
#!/bin/bash export PGPASSFILE=/folder/.pgpass echo $PGPASSFILE pg_dump --username=postgres --format=c --file=/backup/db/db.sqlc database
但是,脚本仍然要求我input密码。 就我所知,PGPASSFILE具有应有的价值。 有什么问题可能是什么暗示?
/ K
pgpass文件是否设置为0600模式(即只有所有者读/写)? 客户端库将会忽略它,如果它是组或世界可读的。
在我的configuration( Ubuntu 10.04.3
和PostgreSQL 8.4
)上, 当我login的用户名与我试图从.pgpass
文件获取密码的用户名相同时,终于可以使用它了。
以deployer
身份login,我试图使用.pgpass
文件访问用户名appname
拥有的数据库,该用户名没有Unix用户等效。 我无法使.pgpass
工作,直到我开始使用deployer
作为用户访问我的数据库…
这里是我的/home/deployer/.pgpass
文件的内容:
*:*:*:deployer:password
这里是/etc/postgresql/8.4/main/pg_hba.conf
的一部分:
# TYPE DATABASE USER CIDR-ADDRESS METHOD # "local" is for Unix domain socket connections only local all all md5 # IPv4 local connections: host all all 127.0.0.1/32 md5 host all all 192.168.0.1/32 md5 # IPv6 local connections: host all all ::1/128 md5
正如你所看到的,我所有的连接都需要密码( md5
)。
有了这个configuration,假设我有一个用这个命令创build的数据库:
deployer@ubuntu-server:~$ createdb -T template0 -O deployer -E UTF8 dbname
我可以在不input密码的情况下执行以下操作:
deployer@ubuntu-server:~$ dropdb dbname
只要将我的.pgpass
的名称更改为.pgpass-no
,它将需要密码。
顺便说一句,不要忘记你的.pgpass
文件必须在0600
权限下:
deployer@ubuntu-server:~$ ls -la .pgpass -rw------- 1 deployer staff 24 2012-01-06 17:29 .pgpass