致命错误:主机“fe80::1%lo0”没有pg_hba.conf条目

14

当我尝试连接到数据库或运行rails s时,为什么会出现这种情况,有人能帮忙吗?

在我的pg_hba.conf文件中,我有以下内容:

# 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
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     Andrew                                trust
#host    replication     Andrew        127.0.0.1/32            trust
#host    replication     Andrew        ::1/128                 trust

local all all md5

也许我做错了什么?

谢谢


你的连接字符串长什么样?为什么不直接连接到::1?无关紧要,但是你的 local all all md5 不能按原样工作,因为它被你的 local all all trust 抢先了。 - jjanes
@jjanes 我不确定 “fe80::1%lo0” 是从哪里来的?我该如何回到 ::1 - hellomello
好的,操作系统/配置最近有没有做过变更?你的连接字符串/参数是什么(因为这是rails,需要database.yml文件的内容)?如果你使用psql -h localhost连接,是否产生了相同的错误? - Craig Ringer
@CraigRinger 是的,使用 psql -h localhost 仍然会抛出相同的错误。 - Daniel
1
fe80::1%lo0是分配给回环0接口的IPv6本地链接地址,是有效的本地主机。它不应该从/etc/hosts中删除。正确的解决方案是允许IP地址在pg_hba.conf中,就像@Daniel建议的那样。 - None
显示剩余3条评论
6个回答

22

我也遇到了同样的问题。不知怎么回事,这一行被添加到了我的/etc/hosts文件中:

fe80::1%lo0    localhost

将该行从/etc/hosts中注释或删除,应该可以解决它

sudo vi /etc/hosts
#fe80::1%lo0    localhost

4
我在我的电脑上也有完全相同的问题。是Yosemite系统里很奇怪的一个bug,或者可能是开发团队留下来的临时修复措施。参考链接:http://dba.stackexchange.com/questions/74167/postgresql-tries-to-connect-to-fe801-permission-denied 我的连接问题也很奇怪,出现间歇性的情况。 - Chris Sattinger
1
你和我一样,@felix!奇怪的是,在这个问题发生之前,我已经使用了几天的Yosemite 10.10.1。 - Peter Bengtsson
在软件更新后,我也遇到了几次同样的问题。OS X 10.9.5 - hibe
太棒了!帮我解决了那个问题。 - Jonathan

16

我使用的是OSX 10.9.3和Postgres 9.3.4。

以下是我解决此问题的方法:

首先启动psql并执行SHOW hba_file;命令,找到你的pg_hba.conf文件:

              hba_file
-------------------------------------
 /usr/local/var/postgres/pg_hba.conf
(1 row)

现在请将以下行添加到 pg_hba.conf 文件中:

host    all             all             fe80::1%lo0/128         trust

可以通过在psql内运行select pg_reload_conf();重新加载配置文件。

现在您应该能够通过psql -h fe80::1%lo0连接了。


这很有用,可以解决问题,但如果操作系统这样做,那么它就非常糟糕。某些东西已经严重损坏了。就我个人而言,如果我找不到问题所在,我会重新安装系统。 - Craig Ringer
谢谢,这对我有效!在x86_64-apple-darwin14.0.0上的PostgreSQL 9.4.0。 - ron pastore

3

哦,这很有趣。

假设您正在连接到localhost(您没有说明并且没有展示您的database.yml),看起来localhost正在解析为带有区域索引的IPv6链接本地地址

如果使用::1127.0.0.1,它应该可以工作。

这很可能是操作系统配置错误或漏洞,因此如果您想获得任何具体建议,应将更多详细信息添加到问题中(请参见上面的评论)。


1
对我来说,问题是调用sudo rails server -p 80
我将rails服务器绑定到80端口,这样在开发过程中就不必在url localhost:3000中指定端口。这似乎会将fe80::1%lo0»localhost写入我的/etc/hosts文件。
尝试注释掉主机文件中的行,然后运行rails s -p 3000

0

实际上,

当我执行以下命令来备份我的服务器数据库(外部)时,我遇到了同样的错误:

pg_dump
'/Applications/Postgres.app/Contents/Versions/9.3/bin'/pg_dump -d "<database_name>" -h <server_name> -U <db_user_name> -f <destination_path>

我通过将我的<server_name>替换为我的实际服务器IP地址(10.1.0.18)来解决了这个问题。

所以这里的问题是我的系统无法理解<server_name>主机。

当您在/private/etc/hosts文件中添加<server_name>主机时,它可能会永久解决。


-1
另一种方法是:如果网络中没有使用IPv6,您可以将其禁用。在Windows上,IPv6服务也可以被禁用。

仍然可以选择这个方法:如果网络不使用IPv6,则可以简单地将其关闭,另外,如果Windows操作系统关闭支持服务IPv6。 - Juan Serrats

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