Rails and PostgreSQL: Role postgres does not exist

我已经在我的 Mac OS Lion 上安装了 PostgreSQL,并且正在开发一个 Rails 应用程序。我使用 RVM 将所有东西与我的其他 Rails 应用程序分开。

出于某种原因,当我第一次尝试迁移数据库时,rake 找不到 postgres 用户。我知道错了

 FATAL:  role "postgres" does not exist

我有 pgAdmin,所以我可以清楚地看到有一个 postgres 用户在 DB-管理员帐户实际上-所以我不知道还能做什么。

我在某处读到过人们因为 PostgreSQL 的安装路径问题而使用 PostgreSQL,但是如果它找不到数据库的话,我想我不会走那么远。

112845 次浏览

你能有多个本地数据库吗?检查您的 database.yml,并确保您正在打你想要的 pg 分贝。使用 rails console确认。

当数据库用户不存在时,将弹出此消息。
解释是多个本地 databases 不能。角色在集群范围内有效。 又是手动的:

请注意,角色是在数据库集群级别定义的,因此也是如此 在群集中的所有数据库中都有效。

你一定是在另一个 database-cluster里结束了。那将是在同一台机器上运行的另一台服务器,监听不同的端口。或者,更有可能,在另一台机器上。

有没有可能消息实际上来自远程服务器?

最近我安装了 Postgres 后立刻就遇到了这个问题。 如果它在安装后立即出现,您可能会错过默认用户 postgres。 In that case, you can create default user postgres using below command.

Createuser-s-U $USER

Ex: createuser -s -U $USER
enter your required role name: postgres
enter password for your the user:

它将提示您输入所需的数据库角色名和密码 完成该过程后,可以使用以下命令登录 postgres 控制台

psql -U 'your_database_name'

例句: psql-U postgres
在这里,您需要输入密码(如果您已经给出了任何密码) ,同时创建用户。

希望对你有所帮助:)

实际上,出于某种未知的原因,我发现问题实际上是因为 postgreql 角色没有被创建。

试试跑步:

createuser -s -r postgres

注意,角色是 PostgreSQL维护数据库权限。如果 postgres 用户没有角色,那么它就不能访问任何内容。Createuser 命令是围绕 CREATEUSER、 CREATEROLE 等命令的一个瘦 包装纸

我在第一次安装 Heroku 的 POSTGRES.app 时就遇到了这个问题。经过一个早上的反复试验,我认为这一行代码解决了问题。如前所述,这是因为 postgreql 在第一次设置时没有默认角色。我们需要设置一下。

sovanlandy=# CREATE ROLE postgres LOGIN;

You must log in to your respective psql console to use this psql command.

还需要注意的是,如果您已经创建了角色“ postgre”,但仍然得到权限错误,那么您需要使用 command 修改:

sovanlandy=# ALTER ROLE postgres LOGIN;

希望能有帮助!

我当时在 OSX 10.8频道上,我所做的一切尝试都会给我 FATAL: role "USER" does not exist频道。就像很多人在这里说的,运行 createuser -s USER,但是它给了我同样的错误。这最终对我奏效了:

$ sudo su
# su postgres
# createuser -s --username=postgres MYUSERNAME

createuser -s --username=postgres通过连接为 postgres (—— username = postgres 标志)来创建超级用户(- s 标志)。

我看到你的问题已经得到了回答,但是我想为那些使用 OSX 试图安装 PostgreSQL 9.2.4的人们添加这个答案。

在尝试遵循 Ryan Bate 关于使用橡胶部署到 AWS EC2的教程之后,我来到了这里。以下是我的经历: We created a new app using "

rails new blog -d postgresql

显然,这将创建一个以 pg 作为数据库的新应用程序,但是数据库还没有建立。对于 sqlite,您只需运行 rake db: shift,但是对于 pg,您需要首先创建 pg 数据库。Ryan 没有做这一步。命令是 rake db:create:all,然后我们可以运行 rake db:migrate

第二部分是更改 datase.yml 文件。生成文件时,用户名的默认值是“ appname”。然而,postgreql 管理员的角色可能有所不同(至少对我来说是这样)。我把它改成了我的名字(参见上面关于创建角色名的建议) ,然后就可以开始了。

Hope this helps.

在安装和卸载了一大堆 Postgres 软件之后,下面是我现在使用的 Os x Mavericks、 Rails4和 Ruby 2的一些软件。

  1. In the database.yml file, I change the default usernames to my computer's username which for me is just "admin".

  2. In the command line I run rake db:create:all

  3. 然后运行 rake db: shift

  4. 当我运行 Rails 服务器并检查本地主机时,它会说“欢迎加入”。

在 Heroku 文档中; 入门 Whit Rail 4,他们说:

You will also need to remove the username field in your database.yml 如果有,在文件 config/database. yml 中移除: 用户名: 我的应用

然后删除“ development:”中的那一行,如果你没有 pg 告诉在“ myapp”角色下工作的数据库

这一行告诉 Rails 数据库 myapp _ development 应该是 run under a role of myapp. Since you likely don’t have this role in your database we will remove it. With the line remove Rails will try 以当前登录到 电脑。

还要记住为开发创建数据库:

$createdb myapp_development

将“ myapp”替换为您的应用程序名称

我的回答要简单得多。只是转到 db 文件夹并删除 id 列,我曾试图强制创建它,但它实际上是自动创建的。我还删除了 datase.yml 文件中的 USERNAME (在 config 文件夹下)。

您可以通过运行 initdb -U postgres -D /path/to/data或将其作为用户 postgres 运行来解决这个问题,因为它默认为当前用户。GL!

在 Ubuntu 本地用户命令提示符中,输入

sudo -u postgres createuser username

上面的用户名应该与消息“ FATAL: role‘ username’does not been”中指示的名称相匹配

输入用户名的密码。

然后重新输入生成的角色不存在消息的命令。

安装过程创建一个名为 postgres的用户帐户,该帐户与默认的 Postgres 角色相关联。为了使用 Postgres,您可以登录该帐户。但是,如果没有明确指定的 Rails 应用程序寻找一个不同的角色,更具体的角色有您的 unix 用户名,这可能不会创建在 postgres 角色。

为了克服这个问题,您可以创建一个新角色,首先切换到安装过程中创建的默认角色 postgres

sudo -i -u postgres

登录 postgres 帐户后,您可以通过以下命令创建一个新用户:

createuser --interactive

这将提示您进行一些选择,并根据您的响应执行正确的 Postgres 命令来创建用户。

传递一个角色名称和一些权限,然后创建角色,然后可以迁移数据库