我有一个正在运行的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
我甚至试图在我的主目录中配置.pgpass文件,但无济于事:
*:*:*:postgres:postgres
我运行了以下命令:
sudo chmod 0600 .pgpass
然而,似乎任何方法都不起作用.有谁有想法吗?我忘了做某事吗?
sudo不保留大多数环境变量.如果要为在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是否允许这取决于您网站上的有效安全政策.
我不推荐这种方法,因为它在命令行历史记录和进程列表中公开了密码.使用.pgpass文件要好得多,或者最好将pg_hba.conf设置为来自用户postgres的本地连接的对等身份验证.
您可以使用.pgpass文件,但它必须是您正在使用的用户的.pgpass,而不是您正在使用的用户;在这种情况下,它需要~postgres / .pgpass.想一想:运行postgres的psql不知道你是通过sudo从你的帐户运行它,它不知道你的用户帐户是什么,即使它确实没有读取权限作为用户postgres到〜youruser /.pgpass.
另外,-w与–no-password相同.两者都没有意义.