psql:fe_sendauth:没有提供密码

我有一个正在运行的PostgreSQL数据库。 现在我想在我的数据库上自动执行一些操作,但是我的密码有问题。

我正在使用下面的bash脚本:

#!/bin/bash export PGPASSWORD="postgres" sudo -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1" 

当我运行bash脚本时,出现以下错误:

 psql: fe_sendauth: no password supplied 

我甚至试图在我的主目录中configuration.pgpass文件,但无济于事:

 *:*:*:postgres:postgres 

我已经运行了下面的命令:

 sudo chmod 0600 .pgpass 

尽pipe如此,似乎没有任何方法的作品。 有没有人有任何想法? 我忘了做点什么吗?

sudo不保留大多数环境variables。 如果你想要在sudo下运行的命令指定环境variables,可以使用sudo sudo

 sudo PGPASSWORD="postgres" -u postgres psql -d pg_ldap -w --no-password -h localhost -p 5432 -t -c "SELECT id FROM radusers WHERE id=1" 

sudo是否允许这将取决于您的网站上实施的安全策略。

我不推荐这种方法,因为它在命令行历史logging和进程列表中暴露了密码。 使用.pgpass文件会更好,或者最好将pg_hba.conf设置为用于来自用户postgreslocal连接的peer身份validation。

您可以使用.pgpass文件,但它必须是您要sudo的用户的.pgpass文件,而不是您正在使用的用户的.pgpass文件。 在这种情况下,它需要~postgres/.pgpass 。 想想看: psqlpostgres身份运行并不知道你是通过sudo从你的帐户运行的,它不知道你的用户帐号是什么,即使它没有作为用户postgres读取权限~youruser/.pgpass

另外, -w--no-password是一样的。 指定两者都没有意义。