无法连接到数据库postgres:致命:角色" _postgres"不存在

时间:2015-05-19 12:27:46

标签: macos postgresql connection psql

使用OS X 10.10,安装了postgreSQL和PostGIS here,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

为什么不起作用?

1 个答案:

答案 0 :(得分:6)

在OS X的最新版本和一些安装方法中,系统用户使用' _'预先添加或附加到' postgres',因此您的系统用户名称为postgres_ _postgres ,而不是' postgres&# 39 ;.我没有使用OS X,所以我不知道是什么驱使他们这样做。似乎他们想要遵守系统帐户的命名方案。 不要与名为postgres的Postgres数据库用户(登录角色)混淆。这种不匹配会引起各种混乱。至少人们会意识到某些语法元素的不同含义......

这就是为什么你可以通过以下方式登录Postgres:

$ psql -U postgres

postgres是此处的数据库角色,而不是操作系统用户。

但这不会奏效:

$ sudo -u postgres

因为没有该名称的操作系统用户。请尝试改为:

$ sudo -u _postgres

但是peer authentication仍然无法正常工作,因为没有同名的数据库用户_postgres。相关回答:

标准安装中默认激活的身份验证方法是对等身份验证,其中本地系统上的系统用户具有对同名数据库角色的无密码访问权限。这解释了最后一条错误消息:

Could not connect to database postgres: FATAL: role "_postgres" does not exist

您的系统尝试使用对等身份验证登录到与当前操作系统用户同名的数据库,但由于命名不匹配而失败。

你的上一个命令应该是这样的:

$ sudo -u _postgres createuser -U postgres christoph

添加的-U postgrescreateuser的一个选项,用于指定要登录的数据库角色。

您仍然需要输入密码。我会考虑使用a .pgpass file中的条目进行无密码访问,而系统用户与所谓的关联数据库角色不同。

相关: