在 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
为什么这样行得通?
最佳答案
在最新版本的 OS X 和一些安装方法中,系统用户是在“postgres”前面或附加一个“_”创建的,因此您的系统用户的名称是 postgres_
或 < strong>_postgres
在您的情况下,不是“postgres”。我不使用 OS X,所以我不知道是什么驱使他们这样做。似乎他们想要遵守系统帐户的命名模式。
不要与名称为 postgres
的 Postgres DB 用户(登录角色)混淆。这种不匹配会导致各种困惑。至少人们开始意识到一些语法元素的不同含义......
这就是为什么你可以通过以下方式登录到 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 <b>-U postgres</b> christoph
添加的 -U postgres
是 createuser
的一个选项指定要登录的数据库角色。
您仍然需要输入密码。我会考虑在 .pgpass file 中使用一个条目用于无密码访问,而系统用户不同于假定关联的数据库角色。
相关:
关于macos - 无法连接到数据库 postgres : FATAL: role"_postgres"does not exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30325623/