# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
#host all all 127.0.0.1/32 ident
host all all 127.0.0.1/32 md5
# IPv6 local connections:
#host all all ::1/128 ident
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication all peer
#host replication all 127.0.0.1/32 ident
#host replication all ::1/128 ident
这意味着 Postgres 正在尝试使用 Ident 协议对用户进行身份验证,但不能。Ident auth 自动匹配 Unix 用户名和 Postgres 用户名。它是这样工作的:
pg_hba.conf
文件(在 中)将“Ident”定义为从特定主机连接的用户连接/etc/postgres-something/main
到数据库的协议db
可能原因及解决方法:
您尝试连接的机器上没有运行Ident服务器。通过尝试在端口 113 上连接到它来测试它。如果失败,请安装一个 Ident 服务器(例如,
sudo apt-get install oidentd
)。有一个 Ident 服务器,但没有与您尝试连接的名称匹配的数据库角色(上例中的“foo”)。因此,通过以某种方式连接到具有超级用户权限的数据库来创建它并执行
CREATE ROLE foo
. 或者将条目添加到/etc/postgresql/.../main/pg_ident.conf
(或/var/lib/pgsql/12/data
或任何地方)。也许 shell 用户名与数据库角色不匹配。您可以通过在连接进行时连接到 Ident 服务器并传递正确的端口号来对此进行测试。
也许您实际上想使用密码而不是 Ident 进行连接。适当编辑
pg_hba.conf
文件。例如,更改:至
请务必在更新
pg_hba.conf
文件后重新启动 Postgres。您可以通过发出以下命令来执行此操作:不确定原因,但这对我来说是固定的:
在
pg_hba.conf
更改为:
确切错误:
Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"
在 CentOS 上,将以下行添加到
/var/lib/pgsql/9.3/data/pg_hba.conf
:并注释掉其他条目。
当然,这个设置并不安全,但如果你只是像我一样在开发虚拟机上乱搞,那可能没问题……
对于 Centos 7,将pg_hba.conf更改为以下内容:
尝试使用 -h 127.0.0.1而不是 -h localhost
如果您还没有尝试过,请查看您的 pg_hba.conf 文件。它将被命名为 /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20);您可能必须使用“find / -name pg_hba.conf”来找到它。
在文件底部,将“METHOD”值更改为“trust”以进行本地测试(有关完整信息,请参阅 postgres 文档)。重新启动机器以确保一切都开始干净并读取新参数。
希望这会治愈你的痛苦。它使用 PostgreSQL 9.3 解决了我在 Fedora 20 上的问题。