无法连接到数据库postgres:致命错误:角色“_postgres”不存在。

4

我正在使用OS X 10.10,从这里安装了postgresql和PostGIS,psql版本为9.3.5。我无法让postgresql运行。

我以管理员身份在计算机上安装了这些软件包。我的用户名是christoph

我唯一能登录的方式是:

$ psql -U postgres

我想在计算机上创建一个名为christoph的用户作为我的管理员名称。

我尝试使用终端(未登录到 psql):

$ sudo -u postgres createuser christoph
> sudo: unknown user: postgres

然后我阅读了一些资料并尝试(从终端,而不是“登录到psql”):

$ sudo -u _postgres createuser christoph
> Password: ****
> Could not connect to database postgres: FATAL: role "_postgres" does not exist

为什么这个不能正常工作?

2
请不要将同样的复制粘贴问题发布到大量网站上。这似乎已经发布到了http://superuser.com/q/916655/167160,http://dba.stackexchange.com/q/101893/7788和https://dev59.com/Bovda4cB1Zd3GeqPTwWq。 - Craig Ringer
1个回答

9
在最新版本的OS X上,通过某些安装方法创建的系统用户在‘postgres’前后添加了‘_’,因此您的系统用户名是postgres__postgres,而不是‘postgres’。我不使用OS X,所以不知道他们为什么这样做。看起来他们想要遵循系统账户的命名模式。
不要将其与名称为postgres的Postgres DB用户(登录角色)混淆。这种不匹配会导致各种混淆。至少人们意识到了某些语法元素的不同含义...
这就是为什么您可以通过以下方式登录Postgres:
$ psql -U postgres

postgres 在这里是数据库角色,而不是操作系统用户。

但以下操作不起作用:

$ sudo -u postgres

因为没有该名称的操作系统用户。请改用以下方法:

$ sudo -u _postgres

但是对等身份验证仍然无法工作,因为没有与_postgres相同名称的数据库用户。相关答案如下: 标准安装中默认启用的认证方法是对等身份验证,其中本地系统上的系统用户可以无密码访问具有相同名称的数据库角色。这解释了最后一个错误消息:
Could not connect to database postgres: FATAL: role "_postgres" does not exist

您的系统尝试使用对等身份验证方式以与当前操作系统用户相同的名称登录DB,但由于命名不匹配而失败。

您的最后一个命令应该像这样工作:

$ sudo -u _postgres createuser <b>-U postgres</b> christoph

添加的 -U postgres 是一个选项,用于指定要登录的数据库角色,详情请参考createuser 。您仍然需要输入密码。如果系统用户与所述DB角色不同,我建议使用.pgpass文件中的条目以免密码访问。 相关:

谢谢你的回答。我刚刚意识到那里有一个可怕的打字错误。我尝试使用“_postgres”,但出现了错误信息。 - four-eyes
@Stoffer:我的回答仍然适用。我本来想问为什么你没有收到另一个错误消息,现在清楚了。 - Erwin Brandstetter
感谢您的更新和耐心等待!所创建的用户 christoph。这是一个超级用户还是只是另一个角色,用于登录到具有 db role postgres 访问权限的 db 中? - four-eyes
@Stoffer: 普通用户。在这里阅读详细手册:(http://www.postgresql.org/docs/current/interactive/sql-createrole.html)和(http://www.postgresql.org/docs/current/interactive/app-createuser.html)。 - Erwin Brandstetter
让我们在聊天中继续这个讨论 - four-eyes
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接