Разрешение Postgres запрещено создавать базу данных на rake db: create: all
Я пытаюсь создать базы данных postgres для разработки и тестирования.
Я использую...
- OSX Yosemite
- Версия Rails: 4.2.0
- git версия: 2.2.2
- psql версия: 9.4.0
- рубиновая версия: 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
?
- Почему он сказал, что разработка не может быть создана, тогда скажите мне, что она уже существует?
Все это кажется слишком запутанным и напоминает мне настройку php с apache в самые старые времена. Я не хочу иметь дело с проблемами каждый раз, когда я создаю новое приложение и пытаюсь следовать рекомендациям герою, чтобы использовать postgres во время разработки.
Ответы
Ответ 1
Я столкнулся с такими же проблемами при запуске rake db:test:prepare
в postgresql
в моем проекте Ruby on Rails. Из сообщения об ошибке довольно ясно, что это проблема разрешения для пользователя. Я добавил CREATEDB
разрешение для new_user
, как показано на консоли.
Для доступа к консоли postgres:
$ sudo -u postgres -i
[email protected]:~$ psql
Там:
postgres=# ALTER USER new_user CREATEDB;
Теперь он работает отлично. У вас могут возникнуть другие проблемы с владением базой данных, для этого вы можете изменить базу данных privileges
и owner
как следующую команду.
postgres=# GRANT ALL PRIVILEGES ON DATABASE database_name to new_user;
postgres=# ALTER DATABASE database_name owner to new_user;
Ответ 2
Глядя на вашу схему, ваши учетные данные для разработки и тестирования различны.
Возможно, удалите имя пользователя и пароль из схемы, увидев, что ваша тестовая база данных создана.