Postgres权限被拒绝在rake db:create:all上创建数据库

时间:2015-01-23 19:03:12

标签: ruby-on-rails ruby postgresql

我正在尝试为开发和测试创建postgres数据库。

我正在使用......

  • OSX Yosemite
  • Rails版本:4.2.0
  • git版本:2.2.2
  • psql版本:9.4.0
  • ruby​​版本:2.1.0p0
  • HomeBrew版本:0.9.5

...的Gemfile

gem 'pg'

的database.yml

default: &default
  adapter: postgresql
  encoding: unicode
  pool: 5

development:
  <<: *default
  database: myapp_development
  username: username
  password: 

test:
  <<: *default
  database: myapp_test

rake db:create:all返回

PG::InsufficientPrivilege: ERROR:  permission denied to create database
: CREATE DATABASE "myapp_development" ENCODING = 'unicode'
.... (lots of tracing)
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "pool"=>5, "database"=>"myapp_development", "username"=>"username", "password"=>nil}
myapp_test already exists

有什么问题?

修改 我只是尝试将database.yml中的用户名更改为我在Mac上使用的用户名。有效。它还告诉我,不仅maybe_test' already exists, but it also just told me that myapp_development`已经存在。

  • 为什么不能使用我创建的其他用户名并将角色分配给CREATEDB
  • 为什么说无法创建开发然后告诉我它已经存在?

这一切似乎太令人困惑,让我想起了在过去的日子里使用apache进行php设置。我不想每次创建新应用程序时都要处理问题,并且在开发期间尝试遵循heroku建议使用postgres。

2 个答案:

答案 0 :(得分:79)

我在 Ruby on Rails 项目的rake db:test:prepare中运行postgresql时遇到了同样的问题。从错误消息中可以清楚地看出,这是用户的权限问题。我在控制台中为CREATEDB添加了new_user权限,如下所示。

访问postgres控制台:

$ sudo -u postgres -i

postgres@host:~$ psql

在那里:

postgres=# ALTER USER new_user CREATEDB;

它现在完美无缺。您可能还有另一个数据库所有权问题,为此您可以按照以下命令更改数据库privilegesowner

postgres=# GRANT ALL PRIVILEGES ON  DATABASE database_name to new_user;
postgres=# ALTER DATABASE database_name owner to new_user;

答案 1 :(得分:0)

查看您的架构,您的开发和测试凭据是不同的。

也许从架构中删除用户名和密码,看到您的测试数据库确实已经创建。