为什么postgres在hostname=/var/run/postgresql的情况下运行



我一直在尝试让pg使用连接到我的本地postgres实例

const pool = new Pool({
user: "my_user",
host: "localhost",
database: "my_db",
password: "password",
port: 5432,
});

但它从来没有起作用,我反复收到一个错误,说error: Ident authentication failed for user "my_user"。我花了一段时间摆弄postgres用户/角色,以确保my_user拥有数据库和表,但后来我注意到psql -d my_db -U my_user -h localhost失败了,出现了与上面相同的错误。经过一番搜索,我发现使用

host: "/var/run/postgresql"

解决了这个问题,但我不知道为什么。我应该能够使用localhost吗?这似乎是大多数人设置这些东西的默认设置。我在Fedora 33上,刚刚安装了postgres,所以也许这与它是一个新安装有关?

您已将pg_hba.conf设置为使用"ident";对来自localhost的连接进行身份验证。我认为这不是一个很常见的配置。我不认为这会是默认的,我也不知道你为什么要编辑它来做到这一点,但显然这就是发生的事情。(在我看来,仅仅在fedora 33上安装数据库软件并不能自动创建数据库,你必须做一些事情才能做到这一点。如果你遵循了教程,请链接到它(

如果你想使用";ident";身份验证,然后在日志文件中查看它失败的原因,然后修复它(也许您需要安装oidentd?(。如果你不想使用它,那么编辑pg_hba,这样你就不会使用"ident";。

PostgreSQL可能没有配置为允许该用户通过TCP连接,只允许通过UNIX套接字连接。检查Postgres安装的pg_hba.conf-它应该包含一个允许my_user从主机127.0.0.1/32访问my_db的条目。可以使用更广泛的津贴来代替它。

该文件通常会包含许多有用的示例,这些示例默认情况下会被注释掉,但如果有疑问,请参阅手册:https://www.postgresql.org/docs/current/auth-pg-hba-conf.html

Postgres附带的默认值可能取决于您使用的Linux分发/包存储库。

相关内容