【问题标题】:Rails and PostgreSQL: Role postgres does not existRails 和 PostgreSQL:角色 postgres 不存在
【发布时间】:2011-12-13 09:47:15
【问题描述】:

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

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

 FATAL:  role "postgres" does not exist

我有 pgAdmin,所以我可以清楚地看到数据库中有一个 postgres 用户 - 实际上是管理员帐户 - 所以我不确定还能做什么。

我在某处读到过有人因为 PostgreSQL 安装在哪个路径而遇到问题,但我认为如果找不到数据库,我不会走那么远。

【问题讨论】:

标签: ruby-on-rails postgresql rake


【解决方案1】:

实际上,由于某些未知原因,我发现问题实际上是因为尚未创建 postgresql 角色。

尝试运行:

createuser -s -r postgres

请注意,角色是 PostgreSQL maintains database permissions 的方式。如果 postgres 用户没有角色,则它无法访问任何内容。 createuser 命令是 CREATE USER、CREATE ROLE 等命令周围的一个瘦 wrapper

【讨论】:

  • 我必须使用sudo su - postgres 才能使用此命令。谢谢!
  • 不知道我的设置是如何产生的,但我创建的 postgresql 没有 postgres 用户和角色,myUser 作为唯一用户,但拒绝让我以名为 myUser 的数据库不存在为借口!这场混乱的未解之谜!
  • @StuartNelson:这似乎是一个常见问题的解决方案 (same here)。但这显然不是这个问题的答案。 OP 明确指出该角色存在于他的数据库中。
  • 除非您将角色与用户混为一谈。用户存在,角色不存在 - 他清楚地说 用户 存在,而不是角色。
  • -r 选项对于 -s 选项不是必需的。超级用户包括“创建角色”属性。
【解决方案2】:

最近我在安装 postgres 后立即遇到了这个问题。 如果它在安装后立即出现,您可能缺少默认用户 postgres。 在这种情况下,您可以使用以下命令创建默认用户 postgres。

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
此处,如果您提供了密码,则需要在创建用户时输入密码。

希望对你有帮助:)

【讨论】:

    【解决方案3】:

    我使用的是 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 的人添加此答案。

    【讨论】:

    • 您可以将前两行缩短为sudo su postgres
    • 这也是我在 ubuntu 上的解决方案,不要忘记更新你的 database.yml 以使用与上面相同的用户名
    【解决方案4】:

    当数据库用户不存在时,会弹出此消息。比较manual here
    多个本地数据库 不能解释。角色在集群范围内有效。 manual again

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

    您一定是在另一个数据库集群中结束。那将是在同一台机器上运行的另一台服务器,监听不同的端口。或者,更有可能的是,在不同的机器上。

    难道消息实际上来自远程服务器?

    【讨论】:

    • 就是这样 - 我一直难以让 postgresql 正常工作,所以我进行了全新安装,所以我现在必须有几个实例。虽然更改了 database.yml 文件中的端口,但一切正常。感谢您的帮助!
    • 即使在清理完所有图像后也无法正常工作 - docker rmi $(docker images -q) --force。但问题出在volumes 我猜
    【解决方案5】:

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

    sovanlandy=# CREATE ROLE postgres LOGIN;
    

    您必须登录到各自的 psql 控制台才能使用此 psql 命令。

    另外指出,如果你已经创建了角色'postgre',但仍然出现权限错误,你需要使用命令进行更改:

    sovanlandy=# ALTER ROLE postgres LOGIN;
    

    希望对你有帮助!

    【讨论】:

      【解决方案6】:

      在 Heroku 文档中;开始使用 whit rails 4,他们说:

      您还需要删除 database.yml 中的用户名字段 如果有的话:在文件 config/database.yml 中删除:用户名: 我的应用程序

      然后你只需删除“开发:”中的那一行,如果你不 pg 告诉在角色“myapp”下工作的数据库

      这一行告诉 Rails 数据库 myapp_development 应该是 在 myapp 的角色下运行。因为你可能没有这个角色 您的数据库,我们将删除它。随着线 remove Rails 将尝试 以当前登录的用户身份访问数据库 电脑。

      还要记得创建开发用的数据库:

      $createdb myapp_development
      

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

      【讨论】:

        【解决方案7】:

        你能有多个本地数据库吗?检查您的 database.yml 并确保您正在访问您想要的 pg db。使用rails console进行确认。

        【讨论】:

          【解决方案8】:

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

          要克服这个问题,您可以创建一个新角色,首先切换到安装期间创建的默认角色 postgres

          sudo -i -u postgres

          登录postgres账号后,可以通过命令新建用户:

          createuser --interactive

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

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

          【讨论】:

            【解决方案9】:

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

            【讨论】:

              【解决方案10】:

              在 Ubuntu 本地用户命令提示符下,但不是 root 用户,键入

              sudo -u postgres 创建用户名

              上面的用户名应该与消息“致命:角色'用户名'不存在”中指示的名称匹配。

              输入用户名密码。

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

              【讨论】:

                【解决方案11】:

                在尝试遵循 Ryan Bate 的关于使用橡胶部署到 AWS EC2 的教程后,我最终来到了这里。这是发生在我身上的事情: 我们使用“

                rails new blog -d postgresql

                显然这会创建一个以 pg 作为数据库的新应用程序,但尚未创建数据库。使用 sqlite,您只需运行 rake db:migrate,但是使用 pg 您需要先创建 pg 数据库。瑞安没有做这一步。命令是rake db:create:all,那么我们就可以运行rake db:migrate

                第二部分是更改 database.yml 文件。生成文件时的默认用户名是“appname”。但是,您在 postgresql 管理员中的角色可能有所不同(至少对我而言)。我把它改成了我的名字(参见上面关于创建角色名称的建议),我很高兴。

                希望这会有所帮助。

                【讨论】:

                  【解决方案12】:

                  在大量安装和卸载 Postgres 之后,这就是现在似乎对我来说与 Os X Mavericks、Rails 4 和 Ruby 2 一致的工作。

                  1. 在 database.yml 文件中,我将默认用户名更改为我计算机的用户名,对我来说只是“admin”。

                  2. 在命令行中我运行 rake db:create:all

                  3. 然后我运行 rake db:migrate

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

                  【讨论】:

                    【解决方案13】:

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2018-06-20
                      • 2021-10-11
                      • 2017-05-15
                      • 1970-01-01
                      • 2023-01-26
                      • 2020-03-04
                      相关资源
                      最近更新 更多