postgresql – 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

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

*:*:*:postgres:postgres

我运行了以下命令:

sudo chmod 0600 .pgpass

然而,似乎任何方法都不起作用.有谁有想法吗?我忘了做某事吗?

@H_403_20@
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相同.两者都没有意义.

相关文章

来源:http://www.postgres.cn/docs/11/ 4.1.1. 标识符和关键词 SQL标识符和关键词必须以一个...
来源:http://www.postgres.cn/docs/11/ 8.1. 数字类型 数字类型由2、4或8字节的整数以及4或8...
来源:http://www.postgres.cn/docs/11/ 5.1. 表基础 SQL并不保证表中行的顺序。当一个表被读...
来源:http://www.postgres.cn/docs/11/ 6.4. 从修改的行中返回数据 有时在修改行的操作过程中...
来源:http://www.postgres.cn/docs/11/ 13.2.1. 读已提交隔离级别 读已提交是PostgreSQL中的...
来源:http://www.postgres.cn/docs/11/ 9.7. 模式匹配 PostgreSQL提供了三种独立的实现模式匹...