PG::InsufficientPrivilege: 错误:没有权限创建数据库 Ruby on Rails 应用程序。

10
我正在尝试为我的Ruby on Rails应用程序创建一个PostgreSQL数据库,我按照安装后的以下步骤进行操作:
sudo -u postgres -i
psql
CREATE USER rohitrp
CREATE DATABASE library_development OWNER rohitrp
CREATE DATABASE library_test OWNER rohitrp

我的database.yml文件如下:

development:
  adapter: postgresql
  encoding: unicode
  database: library_development
  username: rohitrp
  password:
  pool: 5
  timeout: 5000

test:
  adapter: postgresql
  encoding: unicode
  database: library_test
  username: rohitrp
  password:
  pool: 5
  timeout: 5000

当我运行rake db:setup时,我遇到了以下错误:
PG::InsufficientPrivilege: ERROR:  permission denied to create database
: CREATE DATABASE "library_development" ENCODING = 'unicode'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `async_exec'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `block in execute'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract_adapter.rb:473:in `block in log'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract_adapter.rb:467:in `log'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:154:in `execute'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/schema_statements.rb:78:in `create_database'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/postgresql_database_tasks.rb:17:in `create'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:93:in `create'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:107:in `block in create_current'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:275:in `block in each_current_configuration'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:274:in `each'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:274:in `each_current_configuration'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:106:in `create_current'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/railties/databases.rake:17:in `block (2 levels) in <top (required)>'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:240:in `call'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:240:in `block in execute'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:235:in `each'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:235:in `execute'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:179:in `block in invoke_with_call_chain'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:201:in `block in invoke_prerequisites'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:199:in `each'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:199:in `invoke_prerequisites'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:178:in `block in invoke_with_call_chain'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:201:in `block in invoke_prerequisites'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:199:in `each'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:199:in `invoke_prerequisites'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:178:in `block in invoke_with_call_chain'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:165:in `invoke'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:150:in `invoke_task'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:106:in `block (2 levels) in top_level'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:106:in `each'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:106:in `block in top_level'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:115:in `run_with_threads'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:100:in `top_level'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:78:in `block in run'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:75:in `run'
/home/rohitrp/.rbenv/versions/2.2.1/bin/rake:33:in `<main>'
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"library_development", "username"=>"rohitrp", "password"=>nil, "pool"=>5, "timeout"=>5000}
PG::InsufficientPrivilege: ERROR:  permission denied to create database
: CREATE DATABASE "library_test" ENCODING = 'unicode'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `async_exec'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `block in execute'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract_adapter.rb:473:in `block in log'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activesupport-4.2.4/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/abstract_adapter.rb:467:in `log'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:154:in `execute'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/schema_statements.rb:78:in `create_database'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/postgresql_database_tasks.rb:17:in `create'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:93:in `create'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:107:in `block in create_current'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:275:in `block in each_current_configuration'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:274:in `each'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:274:in `each_current_configuration'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/tasks/database_tasks.rb:106:in `create_current'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/gems/2.2.0/gems/activerecord-4.2.4/lib/active_record/railties/databases.rake:17:in `block (2 levels) in <top (required)>'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:240:in `call'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:240:in `block in execute'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:235:in `each'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:235:in `execute'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:179:in `block in invoke_with_call_chain'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:201:in `block in invoke_prerequisites'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:199:in `each'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:199:in `invoke_prerequisites'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:178:in `block in invoke_with_call_chain'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:201:in `block in invoke_prerequisites'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:199:in `each'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:199:in `invoke_prerequisites'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:178:in `block in invoke_with_call_chain'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/monitor.rb:211:in `mon_synchronize'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:172:in `invoke_with_call_chain'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/task.rb:165:in `invoke'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:150:in `invoke_task'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:106:in `block (2 levels) in top_level'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:106:in `each'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:106:in `block in top_level'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:115:in `run_with_threads'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:100:in `top_level'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:78:in `block in run'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:176:in `standard_exception_handling'
/home/rohitrp/.rbenv/versions/2.2.1/lib/ruby/2.2.0/rake/application.rb:75:in `run'
/home/rohitrp/.rbenv/versions/2.2.1/bin/rake:33:in `<main>'
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"unicode", "database"=>"library_test", "username"=>"rohitrp", "password"=>nil, "pool"=>5, "timeout"=>5000}
-- create_table("books", {:force=>:cascade})
rake aborted!
ActiveRecord::NoDatabaseError: FATAL:  database "library_development" does not exist
/home/rohitrp/RubymineProjects/library/db/schema.rb:16:in `block in <top (required)>'
/home/rohitrp/RubymineProjects/library/db/schema.rb:14:in `<top (required)>'
PG::ConnectionBad: FATAL:  database "library_development" does not exist
/home/rohitrp/RubymineProjects/library/db/schema.rb:16:in `block in <top (required)>'
/home/rohitrp/RubymineProjects/library/db/schema.rb:14:in `<top (required)>'
Tasks: TOP => db:schema:load
(See full trace by running task with --trace)

为解决权限问题,我按照这个链接上的答案进行操作:Postgres permission denied to create database on rake db:create:all。但是我仍然遇到了同样的错误。

您的用户rohitrp没有创建数据库的权限。但是既然您已经创建了数据库,为什么还要运行db:setup呢? - Marc-Alexandre Bérubé
@Marc-AlexandreBérubé 当我运行 db:migrate 时,我遇到了 ActiveRecord::NoDatabaseError: FATAL: database "library_development" 不存在的错误。 - user1692342
@Marc-AlexandreBérubé 它是空的。 - user1692342
6
在PostgreSQL中,使用命令ALTER USER rohitrp CREATEDB;来授权用户rohitrp创建数据库(在psql控制台中使用此命令,您还需要以超级用户(例如用户postgres)身份登录)。请注意,翻译尽量保持原意,同时使语言更加通俗易懂。 - MrYoshiji
使用我给你的命令后,PostgreSQL 的输出是什么?它是否成功运行?你可以直接在 database.yml 中使用用户 postgres 而不是 rohitrp,但我认为最好使用另一个用户帐户。你所做的是正确的,只是“奇怪”的是你不能授予 rohitrp 用户权限。 - MrYoshiji
显示剩余7条评论
2个回答

19
$ psql -U postgres
postgres=# ALTER USER username CREATEDB;

13

在设置 Ruby on Rails 应用程序时,我也遇到了这个问题。然后:

  1. sudo -u postgres psql

    这将让您进入 psql shell。

一旦您进入 shell,请键入以下内容:

  1. ALTER USER username CREATEDB;

username 的位置上,您需要添加您默认的系统用户名(在大多数情况下)。

输入图像描述


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接