我在我的主目录中创建了一个
.pgpass
文件,如下所示
localhost:5432:somedb:someuser:somepass
我正在使用一个 shell 脚本,它创建一个目录并将
somedb
的 pg_dump 放在那里 :
mkdir directory
pg_dump somedb > directory/somefile.dump
仍然提示输入密码。
这里错在哪里?
您是否尝试指定主机、用户和数据库?
pg_dump -U someuser -h localhost somedb > directory/somefile.dump
主机:5432:somedb:someuser:somepass
sudo chmod 600 .pgpass
sudo chown 登录用户名:登录用户名.pgpass
导出 PGPASSFILE='/home/user/.pgpass'
现在通过连接数据库进行检查:
psql -h 主机 -U someuser somedb
它没有提示输入密码,并登录到postgresql。
虽然问题已经得到解答并接受,但也可能会发生 .pgpass 文件的权限设置不正确的情况。它必须禁止世界和组访问:
/bin/chmod 0600 ~/.pgpass
psql
(startup.c) 调用 PQconnectdbParams
(fe-connect.c),然后调用 passwordFromFile
。这是确保使用 pgpass 文件的清单:
连接字符串中的标志
--password
/-W
和password=
未设置。否则,pgpass 文件将不会被使用。PGPASSWORD
未设置 (echo $PGPASSWORD
)。否则,pgpass 文件将不会被使用。$PGPASSFILE
或默认 ~/.pgpass
或 %APPDATA%\postgresql\pgpass.conf
)chmod 600 ~/.pgpass
);否则 psql
将打印警告。psql
将打印警告。psql
用户读取(例如 cat ~/.pgpass
);否则 psql
将在没有警告的情况下忽略它。确保它由用户拥有,并且其所有祖先目录都可由用户执行。hostname:port:database:username:password
(密码文件、passwordFromFile
)。每个字段(密码除外)都可以是 *
。字符 :
和 \
必须转义 \:
和 \\
(即使在密码中)。密码以 :
或行尾结束,可以包含除 \r
、\n
或 \0
之外的任何字节。任何格式不正确或与主机和用户不匹配的行都会被忽略,而不发出警告,就像它们是注释一样。*
。检查的服务器的“pwhost”是 host
名称(如果非空),或者是 hostaddr
IP 地址。否则,该行将被忽略而不发出警告。不幸的是,这些文件中没有日志记录,因此如果这没有帮助,那么您可能需要自己编译
psql
和 libpq
并在调试器中运行它。
检查 .pgpass 文件的所有者。花了半个小时才发现我已经使用 sudo 创建了 .pgpass 文件。我的用户和位置的命令是
chown postgres:postgres /var/lib/pgsql/.pgpass
。
就我而言,我已经设置了 PGPASSWORD 环境变量(密码错误),所以
psql
选择了它而不是里面的内容 .pgpass
如果您的密码恰好包含冒号,则必须在其前面添加 \ 来转义,以便密码被识别。
确保交叉检查是否有空格并将其删除。 :)