ali*_*aba 22 postgresql ubuntu-12.04
我有一个正在运行的 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"
Run Code Online (Sandbox Code Playgroud)
当我运行 bash 脚本时,出现以下错误:
psql: fe_sendauth: no password supplied
Run Code Online (Sandbox Code Playgroud)
我什至尝试在我的主目录中配置 .pgpass 文件,但无济于事:
*:*:*:postgres:postgres
Run Code Online (Sandbox Code Playgroud)
我已经运行了以下命令:
sudo chmod 0600 .pgpass
Run Code Online (Sandbox Code Playgroud)
然而,似乎任何方法都不起作用。有谁有想法吗?我是不是忘记做某事了?
Cra*_*ger 17
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"
Run Code Online (Sandbox Code Playgroud)
是否sudo允许这将取决于您站点上有效的安全策略。
我不推荐这种方法,因为它会在命令行历史记录和进程列表中公开密码。最好使用.pgpass文件,或者最好设置pg_hba.conf为peer对local来自用户的连接进行身份验证postgres。
您可以使用一个.pgpass文件,但它一定是.pgpass你的用户的sudo“荷兰国际集团,而不影响用户你sudoING的; ~postgres/.pgpass在这种情况下应该是这样。想一想:psql运行方式postgres不知道您是通过sudo您的帐户运行它的,它不知道您的用户帐户是什么,即使这样做了,它也没有用户postgres对~youruser/.pgpass.
此外,-w与--no-password. 没有必要同时指定两者。