Rails and PostgreSQL: Role postgres does not exist
我在我的Mac OS Lion上安装了PostgreSQL,正在开发一个rails应用程序。 我使用RVM将所有内容与其他Rails应用程序分开。
出于某种原因,当我第一次尝试迁移数据库时,rake无法找到postgres用户。 我收到了错误
1 | FATAL: ROLE"postgres" does NOT exist |
我有pgAdmin,所以我可以清楚地看到数据库中有一个postgres用户 - 实际上是管理员帐户 - 所以我不知道还能做什么。
我在某处读过有关PostgreSQL问题的人,因为它安装了哪条路径,但是如果它找不到db那么我认为我不会那么远。
实际上,由于某些未知原因,我发现问题实际上是因为没有创建postgresql角色。
试试跑步:
1 | createuser -s -r postgres |
请注意,角色是PostgreSQL维护数据库权限的方式。如果postgres用户没有角色,则它无法访问任何内容。 createuser命令是围绕命令CREATE USER,CREATE ROLE等的瘦包装器。
最近我在安装postgres后立即遇到了这个问题。
如果它在安装后立即出现,则可能缺少默认用户postgres。
在这种情况下,您可以使用以下命令创建默认用户postgres。
createuser -s -U $ USER
1 2 3 | Ex: createuser -s -U $USER enter your required ROLE name: postgres enter password FOR your the USER: |
它将提示您输入所需的数据库角色名称和密码
完成此过程后,您可以使用以下命令登录postgres控制台
1 | psql -U 'your_database_name' |
例如:psql -U postgres
在这里,如果您在创建用户时已经提供了密码,则需要输入密码。
希望能帮助到你 :)
我在OSX 10.8上,我尝试的一切都会给我
1 2 3 | $ sudo su # su postgres # createuser -s --username=postgres MYUSERNAME |
我看到您的问题已得到解答,但我想为使用OSX尝试安装PostgreSQL 9.2.4的人添加此答案。
当数据库用户不存在时,将弹出此消息。比较这里的手册。
多个本地数据库不能解释。角色在群集范围内有效。手册再次:
Note that roles are defined at the database cluster level, and so are
valid in all databases in the cluster.
您必须以另一个数据库集群结束。那将是在同一台机器上运行的另一台服务器,监听不同的端口。或者,更有可能的是,在另一台机器上。
事实上,消息来自远程服务器吗?
我第一次安装Heroku的POSTGRES.app时遇到了这个问题。经过一个早上的试验和错误,我认为这一行代码解决了问题。如前所述,这是因为postgresql在第一次设置时没有默认角色。我们需要设定它。
1 | sovanlandy=# CREATE ROLE postgres LOGIN; |
您必须登录到各自的psql控制台才能使用此psql命令。
另请注意,如果您已经创建了角色'postgre'但仍然获得权限错误,则需要使用命令进行更改:
1 | sovanlandy=# ALTER ROLE postgres LOGIN; |
希望能帮助到你!
在Heroku文档中;开始使用导轨4,他们说:
You will also need to remove the username field in your database.yml
if there is one so: In file config/database.yml remove: username:
myapp
然后你只需在"development:"中删除该行,如果你没有pg告诉数据库在角色"myapp"下工作
This line tells rails that the database myapp_development should be
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
to access the database as user who is currently logged into the
computer.
还记得创建用于开发的数据库:
1 | $createdb myapp_development |
为您的应用名称补充"myapp"
你有多个本地数据库吗?检查
在Ubuntu本地用户命令提示符下,但不是root用户,键入
sudo -u postgres createuser username
上面的用户名应该与消息"致命:角色'用户名'不存在的消息中指示的名称相匹配。"
输入用户名的密码。
然后重新输入生成角色不存在的命令消息。
我的回答要简单得多。刚刚进入db文件夹并删除了我试图强制创建的id列,但实际上是自动创建的。我还删除了database.yml文件中的USERNAME(在config文件夹下)。
您可以通过运行
经过一堆Postgres的安装和卸载之后,现在看起来对于我来说,Os X Mavericks,Rails 4和Ruby 2的工作效果始终如一。
在database.yml文件中,我将默认用户名更改为我计算机的用户名,对我而言只是"admin"。
在命令行中我运行rake db:create:all
然后我运行rake db:migrate
当我运行rails服务器并检查本地主机时,它显示"欢迎乘客"。
在尝试跟随Ryan Bate关于使用橡胶部署到AWS EC2的教程之后,我最终到了这里。这是我发生的事情:
我们使用"创建了一个新应用"
显然,这会创建一个以pg作为数据库的新应用程序,但数据库尚未生成。使用sqlite,您只需运行rake db:migrate,但是使用pg,您需要先创建pg数据库。瑞安没有采取这一步骤。命令是
第二部分是更改database.yml文件。生成文件时用户名的默认值为"appname"。但是,你的postgresql管理员的角色可能是不同的(至少对我而言)。我把它改成了我的名字(见上面关于创建角色名称的建议),我很高兴。
希望这可以帮助。