尝试为ROR应用设置Postgres,出现错误- fe_sendauth:未提供密码

26

得到:

An error has occurred:

Error connecting to the server: fe_sendauth: no password supplied

database.yml 中的设置与其他机器上的应用程序设置相同。

我该如何设置,以便不需要硬编码密码?

我可以使用 PgAdmin-III 查看数据库。

我宁愿不在 database.yml 中包含密码,因为使用此应用程序的其他机器不需要它,所以这似乎与我的 Pg 安装有关。


我会建议你查看 pg_hba.conf 文件,看看是否为其他数据库添加了任何 identtrust 规则;并将其与此进行比较。 - Craig Ringer
4个回答

62

您需要修改您的pg_hba.conf文件。下面是一个例子:

pg_hba.conf文件内容:

TYPE  DATABASE        USER            ADDRESS                 METHOD

host    all             all             127.0.0.1/32            trust

host    all             PC             127.0.0.1/32            trust

host    all             all             ::1/128                 trust

需要注意的是,trust 意味着 address 上的任何人(在这种情况下为本地主机)都可以作为所列出的用户连接(或者在这种情况下是他们选择的任何用户)。这只适用于带有不重要数据的开发配置。 不要在生产环境中使用此功能


3
谢谢。不幸的是,我已经这样做了并重新启动了postgres,但没有帮助。错误信息相同。 - Michael Durrant
7
你确定连接到正确的服务器并编辑了正确的 pg_hba.conf 文件吗?在 psql 中尝试运行 SHOW hba_file; 查找 pg_hba.conf 文件。还要检查 PostgreSQL 服务器日志。 - Craig Ringer
我不得不将“PC”更改为“all”,才能使其正常工作,但除此之外,感谢您的答案! - Eric Hu
在PGAdmin中,您可能需要重新加载配置:右键单击“PostgreSQL X.Y”->“重新加载配置”。 - chris
这个方法可行!但是我不得不重启pg服务。我使用了sudo -u postgres -i psql SELECT pg_reload_conf();来完成操作。并且我使用SHOW hba_file;命令在psql中找到了pg_hba.conf文件。 - Juan José Ramírez

11

@rodrigo-zurek说得很对,你需要更改pg_hba.conf。我想为OSX用户添加这个答案,因为pg_hba.conf在默认情况下位于不同的位置。

sudo su - postgres
vim /Library/PostgreSQL/<YOUR_VERSION>/data/pg_hba.conf

默认情况下,METHOD列中将包含md5,但将所有这些都替换为trust

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust

然后,在您的应用程序中打开位于 Applications/PostgreSQL 9.X 中的 pgAdmin III,右键单击数据库(例如 PostgreSQL 9.4(localhost)),并单击 Reload Configuration 按钮。之后,我就可以运行 rake db:create 命令了。


请问如何编辑 pg_hba.conf 并保存?我是 Mac 的新手。 - S.Perera

0
#appveyor.yml
services: postgresql
test_script:
  - SET PGUSER=postgres
  - SET PGPASSWORD=Password12!
  - PATH=C:\Program Files\PostgreSQL\9.6\bin\;%PATH%

0

未提供密码意味着您已设置它需要密码验证,但未提供密码。这是 9.0 的文档:http://www.postgresql.org/docs/9.0/static/auth-methods.html

请记住,为了避免混淆,本地身份验证从 9.1 中的“ident”更改为“peer”。请参阅 9.1 文档:http://www.postgresql.org/docs/9.1/static/auth-methods.html

还请注意,这是有序规则集,第一匹配优先。此外,local 和 localhost 是不同的。Local 用于本地 UNIX 域套接字连接,而 host localhost 则用于到本地主机的网络连接。因此,看起来您需要一些故障排除工作,但希望文档能够帮助您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接