Rails和PostgreSQL:角色postgres不存在

Ada*_*dam 104 postgresql rake ruby-on-rails

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

出于某种原因,当我第一次尝试迁移数据库时,rake无法找到postgres用户.我收到了错误

 FATAL:  role "postgres" does not exist
Run Code Online (Sandbox Code Playgroud)

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

我在某处读过有关PostgreSQL问题的人,因为它安装了哪条路径,但是如果它找不到db那么我认为我不会那么远.

小智 257

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

试试跑步:

createuser -s -r postgres
Run Code Online (Sandbox Code Playgroud)

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

  • 在此命令为我工作之前,我不得不使用`sudo su - postgres`.谢谢! (7认同)
  • 不知道我的设置是如何产生的,但我创建的postgresql没有postgres用户和角色,myUser只是用户,但拒绝让我参与名为myUser的数据库不存在!这个混乱的部分! (2认同)

Pre*_*rem 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: 
Run Code Online (Sandbox Code Playgroud)

它将提示您输入所需的数据库角色名称和密码完成此过程后,您可以使用以下命令登录postgres控制台

psql -U 'your_database_name'
Run Code Online (Sandbox Code Playgroud)

例如:psql -U postgres
这里,如果您在创建用户时已经提供了密码,则需要输入密码.

希望能帮助到你 :)


Jac*_*ack 22

I was on OSX 10.8, and everything I tried would give me the FATAL: role "USER" does not exist. Like many people said here, run createuser -s USER, but that gave me the same error. This finally worked for me:

$ sudo su
# su postgres
# createuser -s --username=postgres MYUSERNAME
Run Code Online (Sandbox Code Playgroud)

The createuser -s --username=postgres creates a superuser (-s flag) by connecting as postgres (--username=postgres flag).

I see that your question has been answered, but I want to add this answer in for people using OSX trying to install PostgreSQL 9.2.4.

  • 你可以将前两行缩短为"sudo su postgres". (2认同)

Erw*_*ter 12

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

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

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

事实上,消息来自远程服务器吗?


sov*_*ndy 10

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

sovanlandy=# CREATE ROLE postgres LOGIN;
Run Code Online (Sandbox Code Playgroud)

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

另请注意,如果您已经创建了角色'postgre'但仍然获得权限错误,则需要使用命令进行更改:

sovanlandy=# ALTER ROLE postgres LOGIN;
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你!


小智 5

在 Heroku 文档中;他们说,从 Rails 4 开始:

\n\n
\n

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

\n
\n\n

然后,如果您不 pg 告诉在角色“myapp”下工作的数据库,则只需删除“development:”中的该行

\n\n
\n

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

\n
\n\n

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

\n\n
$createdb myapp_development\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n