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

Sto*_*ace 2 postgresql connection macos psql

在OS X 10.10上工作,从这里安装postgreSQL和PostGIS ,psql版本9.3.5.我很难让postgreSQL运行.

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

我可以登录的唯一方法是:

$ psql -U postgres
Run Code Online (Sandbox Code Playgroud)

我想创建一个名为的用户christoph,作为我在计算机上的管理员名称.我试过(从终端,没有"登录到psql"):

$ sudo -u postgres createuser christoph
> sudo: unknown user: postgres
Run Code Online (Sandbox Code Playgroud)

然后我读了一下并尝试(从终端,没有"登录到psql"):

$ sudo -u _postgres createuser christoph
> Password: ****
> Could not connect to database postgres: FATAL: role "_postgres" does not exist
Run Code Online (Sandbox Code Playgroud)

为什么不工作?

Erw*_*ter 7

在OS X的最新版本和一些安装方法中,系统用户创建时带有'_'前缀或附加到'postgres',因此系统用户的名称是postgres_或者 _postgres在您的情况下,而不是'postgres'.我不使用OS X,所以我不知道是什么驱使他们这样做.似乎他们想要遵守系统帐户的命名方案.不要与名称的Postgres DB用户(登录角色)混淆postgres.这种不匹配会引起各种混乱.至少人们意识到一些语法元素的不同含义......

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

$ psql -U postgres
Run Code Online (Sandbox Code Playgroud)

postgres 是这里的DB角色,而不是OS用户.

但这不起作用:

$ sudo -u postgres
Run Code Online (Sandbox Code Playgroud)

因为没有该名称的OS用户.尝试改为:

$ sudo -u _postgres
Run Code Online (Sandbox Code Playgroud)

但是,对等身份验证仍然无法正常工作,因为没有同名的DB用户_postgres.相关回答:

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

Could not connect to database postgres: FATAL: role "_postgres" does not exist
Run Code Online (Sandbox Code Playgroud)

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

你的上一个命令应该像这样工作:

$ sudo -u _postgres createuser -U postgres christoph
Run Code Online (Sandbox Code Playgroud)

添加的-U postgrescreateuser指定要登录的DB角色的选项.

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

有关: