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

Bee*_*gie 35 ruby postgresql ruby-on-rails

我正在尝试为开发和测试创建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'
Run Code Online (Sandbox Code Playgroud)

database.yml的

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

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

test:
  <<: *default
  database: myapp_test
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

怎么了?

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

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

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

Rok*_*san 89

运行时,我面临同样的问题rake db:test:preparepostgresql我的Ruby on Rails的项目.从错误消息中可以清楚地看出,这是用户的权限问题.我从控制台添加CREATEDBnew_user以下权限.

要访问postgres控制台:

$ sudo -u postgres -i

postgres@host:~$ psql
Run Code Online (Sandbox Code Playgroud)

在那里:

postgres=# ALTER USER new_user CREATEDB;
Run Code Online (Sandbox Code Playgroud)

它现在很完美.您可能有另一个数据库所有权问题,为此您可以更改数据库privilegesowner以下命令.

postgres=# GRANT ALL PRIVILEGES ON  DATABASE database_name to new_user;
postgres=# ALTER DATABASE database_name owner to new_user;
Run Code Online (Sandbox Code Playgroud)

  • 有时您的用户可能没有足够的权限来执行某些操作。如果授予它所有权限不是问题,还可以运行“ALTER ROLE new_user SUPERUSER;” (3认同)

fiv*_*six 0

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

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