为什么“psql -U”对我来说不起作用?

为什么“psql -U”对我来说不起作用?

我刚刚开始使用 Postgres。

这是在 Ubuntu 14.04 LTS 上全新安装的 Postgres 9.5。我使用了以下 apt repo:http://www.postgresql.org/download/linux/ubuntu/

简介页面http://www.postgresql.org/docs/9.5/static/tutorial-createdb.html说“-U”应该可以工作。但实际上不行:

chris@blue:~$ psql -U postgres
psql: FATAL:  Peer authentication failed for user "postgres"

但是,如果我“su”到 postgres,一切都很好:

chris@blue:~$ sudo su - postgres
postgres@blue:~$ psql
psql (9.5.2)
Type "help" for help.

postgres=# 

我误解什么了吗?

答案1

psql -U 是正常工作。但是,postgresql 尝试验证您的身份的方式失败了。

当您使用 sudo 访问 postgres 时,psql 命令会从您使用 sudo 的 shell 中获取您的身份。如果没有“-U”,它会尝试使用用户 ID 并在角色列表中查找。它会说“嘿,客户端正在用户 ID postgres 下运行!我们可以信任它!”

在这两种情况下,都是 pg_hba.conf 文件在控制着一切。它告诉 postgresql 信任名为“postgres”的本地用户。但除此之外,它使用“peer”身份验证。

通过“对等”身份验证,它希望看到一个具有您名字的数据库用户(“角色”),然后它将把您验证为该用户(仅!)。

答案2

本教程仅在您从源代码安装 PostgreSQL 时才有效。在您的 Ubuntu 安装中,访问控制已设置,因此并非所有用户都可以登录(因此“身份验证失败”)。要遵循本教程,请尝试登录用户postgressudo -u postgres -i),然后按照教程中的步骤操作。

相关内容