我已将 .pgpass 文件放在 /folder/.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
但是,脚本仍然提示我输入密码。据我所知,PGPASSFILE 的值是正确的。有什么提示可以说明问题出在哪里吗?
/K
答案1
pgpass 文件是否设置为模式 0600(即,仅所有者可读/写)?如果它是群组或世界可读的,客户端库将忽略它。
答案2
在我的配置(Ubuntu 10.04.3
和PostgreSQL 8.4
)中,当我登录的用户名与我尝试从文件中获取密码的用户名相同时,我终于可以让它工作了.pgpass
。
以 身份登录后deployer
,我尝试使用.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
)。
使用此配置,假设我有一个使用此命令创建的数据库:
deployer@ubuntu-server:~$ createdb -T template0 -O deployer -E UTF8 dbname
我无需输入密码即可执行以下操作:
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
答案3
- 创建内容为 .pgpass 的文件
主机:5432:somedb:someuser:somepass
- 使用命令设置权限
sudo chmod 600 .pgpass
- 将文件所有者设置为您登录时使用的同一用户:
sudo chown 登录用户名:登录用户名.pgpass
- 设置 PGPASSFILE 环境变量:
导出 PGPASSFILE='/home/user/.pgpass'
现在通过连接数据库进行检查:
psql -h 主机-U 某些用户某些数据库
我不会提示输入密码并登录到postgresql。
答案4
另一件需要检查的事情是,您没有使用带有-W
的标志psql
,因为这将始终强制手动输入密码,而不是检查您的.pgpass