【问题标题】:Rails: Postgres permission denied to create database on rake db:create:allRails:Postgres 权限被拒绝在 rake db:create:all 上创建数据库
【发布时间】:2015-03-22 21:45:36
【问题描述】:

我正在尝试创建用于开发和测试的 postgres 数据库。我正在使用:

  • OSX 优胜美地
  • Rails 版本:4.2.0
  • git 版本:2.2.2
  • psql 版本:9.4.0
  • 红宝石版本:2.1.0p0
  • 自制版本:0.9.5

宝石文件:

gem 'pg'

数据库.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 已经存在,而且它还告诉我myapp_development 也已经存在。

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

这一切看起来都太令人困惑了,让我想起了过去用 Apache 进行 PHP 设置。我不想每次创建新应用时都要处理问题,并尝试遵循 Heroku 的建议,在开发过程中也使用 PostgreSQL。

【问题讨论】:

  • rake db:drop:all 然后rake db:create:all
  • 关注this answer 以提供您使用的CREATEDB 角色。你的问题将得到解决。并执行rake db:droprake db:create

标签: ruby-on-rails ruby postgresql


【解决方案1】:

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

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

【讨论】:

  • Rails 创建了 default 变量,它将所有内容传递给下一个变量,除非明确覆盖。所以用户名和密码也被传递到myapp_test 数据库。
【解决方案2】:

在我的 Ruby on Rails 项目中,我在 postgresql 中运行 rake db:test:prepare 时遇到了同样的问题。从错误消息中可以清楚地看出,这是用户的权限问题。我从控制台添加了CREATEDBnew_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;

【讨论】:

  • 非常感谢。
  • 我们在我们的环境中没有创建数据库权限。
  • 非常感谢这个
  • 有时您的用户可能没有足够的权限进行某些操作。如果给它所有的权限不是问题,也运行ALTER ROLE new_user SUPERUSER;
【解决方案3】:
create database demo;
create user demotest with password '123';
grant all privileges on database demo to demotest;
commit;

      This is script for creation of database. But any existing database having password '123' then change your password for new database to password '1234'. This procedure working for me.
 

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多