【问题标题】:Postgresql: FATAL: role does not existPostgresql:致命:角色不存在
【发布时间】:2019-10-04 20:59:07
【问题描述】:

我正在设置 Postgresql 以与 Rails 应用程序一起使用,但我似乎无法连接或正确配置数据库(启动 Rails 服务器后出现的错误是:ActiveRecord::NoDatabaseErrorcould not translate host name "MyProfile" to address: nodename nor servname provided, or not known)。

我从关于这个主题的几十个其他问题中收集到,我需要切换到或创建“MyComputer”角色,但是我注意到它们都需要使用psql 命令。当我只运行psql 时,我再次收到错误FATAL: role "MyProfile" does not exist

到目前为止,我一直在关注 Heroku 的安装过程并卡在here(或更准确地说是here,在安装后,Heroku 说运行psql -h localhost 应该可以工作)。我是否在这里遗漏了一个明显的步骤/做错了什么?

我也试过了:

sudo su - MyProfile
sudo -u postgres createuser owning_user的变体

以及其他几个命令来创建此卷/用户,但我似乎无法完成解决问题所需的工作。

编辑
我还运行了ps aux | grep postgres,看起来所有与postgres 相关的PID 都在“MyProfile”下运行(假设我没看错)。但是 psql 命令仍然返回该角色不存在。 #悲伤的脸

编辑 2
我刚刚打开 Postgres 应用程序并单击“打开 psql”按钮。它打开了终端,运行了一个命令('/Applications/Postgres.app/Contents/Versions/9.5/bin'/psql -p5432),然后给了我同样的错误(psql: FATAL: role "MyProfile" does not exist)。这可能向我暗示这是一个系统问题,而不是 Rails 问题?

编辑 3
这肯定是 pg 问题,而不是 rails 问题。我刚刚卸载了该应用程序,使用 SQLite (yucks) 重新安装了它,运行了本地服务器并显示了测试登录页面。所以问题似乎出在我的本地机器上,而不是应用程序本身。删除了 RoR 标签,仍在寻找 Postgres 专家关于角色问题为何持续存在的答案 :)

【问题讨论】:

    标签: postgresql command-line


    【解决方案1】:

    我在使用 Postgresql 设置新的 Rails 应用程序时遇到了类似的问题。我在下面收到以下错误消息

    FATAL:  role "promisepreston" does not exist
    Couldn't create 'MyBlog_development' database. Please check your configuration.
    rails aborted!
    ActiveRecord::NoDatabaseError: FATAL:  role 
    
    Caused by:
    PG::ConnectionBad: FATAL:  role "promisepreston" does not exist
    

    要解决这个问题,只需遵循以下解决方案

    首先,我们需要通过命令行界面登录postgres用户帐号;

    sudo su - postgres
    

    接下来,使用 psql 客户端连接到数据库服务器,作为 postgres 角色:

    psql -U postgres
    

    欢迎使用 PostgreSQL 交互式终端 psql 10.6。

    postgres@Preston-PC:~$ psql -U postgres
    psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1))
    Type "help" for help
    
    postgres=#
    

    接下来,与 psql 客户端连接,我们将创建一个具有所需 rolename 的角色,该角色具有 LOGIN 属性和所需的 password,并且可以创建数据库和管理角色(N/B:请不要输入此postgres=#,因为它是占位符):

    postgres=# create role rolename with createdb login password 'password1';
    

    注意 SQL 语句末尾所需的尾随分号 ( ; )。单引号('')不是密码的一部分,但必须将其括起来。

    成功了吗?您可以使用 \du 命令检查(N/B:请不要输入此 postgres=#,因为它是占位符):

    postgres=# \du
    

    您现在可以运行该命令为您的 Rails 应用程序创建数据库;

    rails db:create
    

    然后还运行命令为您的 Rails 应用程序迁移数据库;

    rails db:migrate
    

    就是这样。

    我希望这会有所帮助

    【讨论】:

      【解决方案2】:

      如果您使用Postgres.app,则应省略config/database.yml 中的用户名和密码。该错误还告诉您,您输入的 MyProfile 不是作为用户(或 PG 用语中的角色),而是作为数据库连接的主机(而不是 localhost)。

      这确实是您在 config/database.yml 中运行 Postgres.app 所需的全部内容:

      default: &default
        adapter: postgresql
        encoding: unicode
        # For details on connection pooling, see rails configuration guide
        # http://guides.rubyonrails.org/configuring.html#database-pooling
        pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
      
      development:
        <<: *default
        database: myapp_development
      
      test:
        <<: *default
        database: myapp_test
      

      将其剥离并让绝对必须在其开发 postgres 服务器上设置密码的傻瓜使用DATABASE_URL env var 是一个好主意。

      【讨论】:

      • 感谢@max 的想法。我生成了指定 pg 数据库的 rails 应用程序,因此包含用户名和密码的唯一位置是在生产环境中:production: &lt;&lt;: *default database: myapp_com_production username: myapp_com password: &lt;%= ENV['MYAPP_COM_DATABASE_PASSWORD'] %&gt;(我什至需要那个吗?)。否则我的代码和你上面提到的完全一样。
      【解决方案3】:

      真是一团糟……我忘记提到可能对社区有天文意义的一件事是我正在接管别人的机器。有一些挥之不去的设置只是决定他们不会玩得很好。

      最后,我摆脱了 Postgress.app,用 Homebrew 安装了 postgres,我需要的平衡点在这里:http://exponential.io/blog/2015/02/21/install-postgresql-on-mac-os-x-via-brew/

      具体来说,拯救我的那一行是createdb 'whoami'请参阅实际帖子...由于 stackoverflow 格式,语法与我刚刚写的有点不同)...回想起来看起来很明显,但它通过实际创建整个设置正在寻找的psql 的数据库,帮助我当前登录的用户克服了其他旧用户的预设。

      经验教训!

      感谢@max 的帮助,帮助我避免了另一个我即将引起的问题!

      【讨论】:

        猜你喜欢
        • 2017-05-25
        • 1970-01-01
        • 2015-04-01
        • 2012-08-08
        • 1970-01-01
        • 1970-01-01
        • 2015-03-28
        • 1970-01-01
        • 2023-01-26
        相关资源
        最近更新 更多