Подтвердить что ты не робот

Разрешение 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 во время разработки.

4b9b3361

Ответ 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

Глядя на вашу схему, ваши учетные данные для разработки и тестирования различны.

Возможно, удалите имя пользователя и пароль из схемы, увидев, что ваша тестовая база данных создана.