Postgresql:致命错误:角色不存在。
Postgresql:致命错误:角色不存在。
这个问题已经得到了解答:
我正在为Rails应用程序设置PostgreSQL,但似乎无法连接或正确配置数据库(启动Rails服务器后我得到的错误是: ActiveRecord::NoDatabaseError
和 could not translate host name \"MyProfile\" to address: nodename nor servname provided, or not known
)。
从许多其他关于此主题的问题中,我得出的结论是我需要切换到或创建\"MyComputer\"角色,但是我已经注意到所有这些问题都需要使用 psql
命令。即使只运行 psql
,我也再次获得错误 FATAL: role \"MyProfile\" does not exist
。
到目前为止,我一直在遵循Heroku的安装步骤,并且卡在这里(或更准确地说是在安装后的这里,Heroku在这里说运行 psql -h localhost
应该可以工作)。我是否在这里遗漏了一个明显的步骤/做错了什么?
我还尝试过:
sudo su - MyProfile
sudo -u postgres createuser owning_user
的变体
以及一些其他命令,以解决此问题所需的任务,但似乎无法完成。
编辑
我也运行了ps aux | grep postgres
,看起来和postgres相关的所有PID都在“MyProfile”下运行(假设我读的没错)。但是psql命令仍然返回角色不存在的错误。#sadface
编辑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(呕吐),运行了本地服务器,显示了测试页面。所以问题似乎是出在我的本地机器上,而不是应用程序本身。已经移除了RoR标签,仍在寻找Postgres大师关于为什么角色问题仍然存在的答案 🙂
真是一团糟......有一件事我忘了提到,对社区来说可能非常有帮助,那就是我正在接管别人的计算机。有一些残留的设置没有按预期工作。
最终,我移除了Postgress.app,用Homebrew安装了Postgresql,我需要的东西在这里:http://exponential.io/blog/2015/02/21/install-postgresql-on-mac-os-x-via-brew/
具体是这行代码拯救了我:createdb 'whoami'
(请查看实际帖子......语法有点不同,因为stackoverflow格式化不同)......回想起来似乎很显然,但它帮助了我当前已登录用户通过创建数据库克服了其他旧用户的预设值,使整个安装得以进行。
吸取了教训!
感谢@max的帮助,还让我避免了另一个问题!
当我在设置一个基于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
接着,使用postgres角色连接数据库服务器,使用psql客户端:
psql -U postgres
欢迎来到psql 10.6,PostgreSQL交互式终端。
postgres@Preston-PC:~$ psql -U postgres psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1)) Type "help" for help postgres=#
接下来,使用psql客户端连接后,我们将创建一个带有我们期望的rolename的角色,该角色具有LOGIN属性和我们期望的密码,并且能够创建数据库和管理角色(注意:请勿输入此postgres =#,因为它是一个占位符):
postgres=# create role rolename with createdb login password 'password1';
注意SQL语句末尾的必需分号(;)。单引号(' ')不是密码的一部分,但必须将其括起来。
它成功了吗?您可以使用\du命令检查(注意:请勿输入此postgres =#,因为它是一个占位符):
postgres=# \du
现在可以运行该命令创建用于Rails应用程序的数据库;
rails db:create
然后运行该命令迁移用于Rails应用程序的数据库;
rails db:migrate
就这些了。
希望这可以帮助到你