我刚刚开始使用 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 安装中,访问控制已设置,因此并非所有用户都可以登录(因此“身份验证失败”)。要遵循本教程,请尝试登录用户postgres
(sudo -u postgres -i
),然后按照教程中的步骤操作。