我只是从 Postgres 开始。
这是在 Ubuntu 14.04 LTS 上全新安装的 Postgres 9.5。我使用了来自: http ://www.postgresql.org/download/linux/ubuntu/的 apt repo
介绍页面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=#
我误解了什么?
本教程仅在您从源代码安装 PostgreSQL 时有效。在您的 Ubuntu 安装中,已经设置了访问控制,因此并非所有内容都可以登录(因此“身份验证失败”)。要按照教程进行操作,请尝试登录
postgres
用户 (sudo -u postgres -i
),然后按照教程中的步骤操作。psql -U 正在尝试正常工作。但是,postgresql 尝试对您进行身份验证的方式失败了。
当您 sudo 到 postgres 时,psql 命令会从您的 sudo'ed shell 中获取您的身份。如果没有“-U”,它会尝试使用用户 ID 并在角色列表中查找它。它说'嘿,客户端在用户 ID postgres 下运行!我们可以相信它!
在这两种情况下,控制事物的是 pg_hba.conf 文件。它告诉 postgresql 信任名为“postgres”的本地用户。但除此之外,它使用的是“对等”身份验证。
使用“对等”身份验证,它希望看到具有您姓名的数据库用户(“角色”),然后它将您作为该用户进行身份验证(仅!)。