macos - 无法连接到数据库 postgres : FATAL: role"_postgres"does not exist

标签 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

为什么这样行得通?

最佳答案

在最新版本的 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 postgrescreateuser 的一个选项指定要登录的数据库角色。

您仍然需要输入密码。我会考虑在 .pgpass file 中使用一个条目用于无密码访问,而系统用户不同于假定关联的数据库角色。

相关:

关于macos - 无法连接到数据库 postgres : FATAL: role"_postgres"does not exist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30325623/

相关文章:

sql - 使用 group by 和 self join 查找重复项

C# 数据连接最佳实践?

java - 在 Mac 上设置 IntelliJ 和 GlassFish

ruby-on-rails - 需要一种较少重复的方式在 Mac 上为菜鸟启动 Rails

sql - 为 PostgreSQL 模拟 CREATE DATABASE IF NOT EXISTS?

java - 日志数据库连接挂起

当我对我的 HTTP 服务器进行压力测试时,Windows 暂时关闭了我的 TCP 堆栈

c++ - 处理 libc++ 和较旧的 libstdc++ 之间的 ABI 差异的好方法是什么?

swift - 检测应用程序是否在 macOS beta 版本上运行

sql - 如何在过滤后订购有很多关系