Rails和PostgreSQL:角色postgres不存在


106

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

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

 FATAL:  role "postgres" does not exist

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

我在某处读到一些关于PostgreSQL的人的问题,因为它安装在哪个路径中,但是我认为如果找不到db,我不会走那么远。


对于在数据库用户(=角色)密切相关的问题postgres尚未创建,这可能会导致同样的错误信息,请参阅此相关的问题:stackoverflow.com/questions/11919391/...
欧文Brandstetter修改

Answers:


12

当数据库用户不存在时,将弹出此消息。在这里比较手册无法解释
多个本地数据库 。角色在群集范围内有效。该手册再次

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

您必须以另一个database-cluster结尾。那将是在同一台计算机上运行的另一台服务器,侦听不同的端口。或者更有可能在另一台机器上。

消息是否可能实际上来自远程服务器?


就是这样-我一直很难使postgresql正常工作,所以我进行了全新安装,因此现在我必须在上面有几个实例。虽然更改了database.yml文件中的端口,但一切正常。谢谢你的帮助!
亚当

即使清理完所有图像也无法工作- docker rmi $(docker images -q) --force。但问题出在volumes我的猜测上
–prasagupd

267

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

尝试运行:

createuser -s -r postgres

请注意,角色是PostgreSQL 维护数据库权限的方式。如果postgres用户没有任何角色,则它将无法访问任何内容。createuser命令是CREATE USER,CREATE ROLE等命令的精简包装


8
sudo su - postgres在此命令对我有用之前,我不得不使用它。谢谢!
康纳·里奇

2
不知道我的设置是如何实现的,但是我创建的postgresql没有postgres用户和角色,myUser是唯一的用户,但拒绝借我名为myUser的数据库不存在的借口!这混乱不堪的部分!
杰罗姆

@StuartNelson:这似乎是解决常见问题的方法(此处相同)。但这显然不是这个问题的答案。OP明确指出该角色存在于他的DB中。
Erwin Brandstetter 2014年

除了将角色与用户合并之外。用户存在,但角色不存在-他清楚地说用户存在,而不是角色。
克里斯·夏洛克

-r选项不是必需的-s。超级用户包括“创建角色”属性。
丹尼斯

26

最近我在安装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
在这里,创建用户时,如果输入密码,则需要输入密码。

希望能帮助到你 :)


22

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


2
您可以将前两行缩短为sudo su postgres
2014年

这也是我在ubuntu上的解决方案,别忘了更新您的database.yml以使用与上面相同的用户名
crobicha 2014年

10

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

sovanlandy=# CREATE ROLE postgres LOGIN;

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

还应注意,如果您已经创建了角色“ postgre”,但仍然遇到权限错误,则需要使用以下命令进行更改:

sovanlandy=# ALTER ROLE postgres LOGIN;

希望能帮助到你!


4

在Heroku文档中;开始说丝毫轨道4,他们说:

如果有,您还需要删除database.yml中的用户名字段:在文件config / database.yml中,删除:用户名:myapp

然后,如果不pg告诉角色为“ myapp”的数据库,则只需删除“ development:”中的该行即可。

此行告诉Rails数据库myapp_development应该在myapp的角色下运行。由于您可能在数据库中没有此角色,因此我们将其删除。在删除行中,Rails将尝试以当前登录到计算机的用户身份访问数据库。

还记得创建数据库进行开发:

$createdb myapp_development

为您的应用名称补充“ myapp”



2

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

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

sudo -i -u postgres

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

createuser --interactive

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

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


1

我的答案要简单得多。刚进入db文件夹并删除了id列,该列是我曾试图强制创建的,但实际上是自动创建的。我还删除了database.yml文件(位于config文件夹下)中的USERNAME。


1

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

sudo -u postgres createuser用户名

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

输入用户名密码。

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


0

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

rails new blog -d postgresql

显然,这创建了一个以pg为数据库的新应用程序,但尚未创建数据库。使用sqlite,您只需要运行rake db:migrate,但是使用pg时,首先需要创建pg数据库。Ryan没有执行此步骤。命令是rake db:create:all,然后我们可以运行rake db:migrate

第二部分是更改database.yml文件。生成文件时,用户名的默认值为“ appname”。但是,您在Postgresql管理员中所扮演的角色是不同的(至少对我来说是这样)。我将其更改为我的名字(请参见上面有关创建角色名称的建议),我很高兴。

希望这可以帮助。


0

经过一堆Postgres的安装和卸载后,这对我来说似乎可以与Os X Mavericks,Rails 4和Ruby 2保持一致。

  1. 在database.yml文件中,我将默认用户名更改为计算机的用户名,对我而言,该用户名仅为“ admin”。

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

  3. 然后我运行rake db:migrate

  4. 当我运行Rails服务器并检查本地主机时,它会显示“ Welcome onboard”。


0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.