Роль не существует и не может создать базу данных при использовании PostgreSQL


Я использую Heroku для своего приложения, и для этого требуется PostgreSQL, но вы все равно можете использовать SQLite3 для разработки. Поскольку Heroku настоятельно рекомендовал не иметь 2 разных баз данных, я решил перейти на PostgreSQL для разработки. Я установил gem pg а также пошел на официальный сайт PostgreSQL, чтобы получить установщик Windows, а также изменил мой database.yml. Во время установки требуется пароль для PostgreSQL, поэтому я его сделал. Я должен был изменить С помощью md5 до trust чтобы пройти мимо:fe_sendauth: no password supplied при попытке создать базу данных.

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# IPv4 local connections:
host    all             all             127.0.0.1/32            trust # was md5
# IPv6 local connections:
host    all             all             ::1/128                 trust # was md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     postgres        127.0.0.1/32            trust
#host    replication     postgres        ::1/128                 trust

после избавления от этого, хотя, теперь я получаю это:

$ rake db:create
(in C:/app)
FATAL:  role "User" does not exist 
Couldn't create database for {"adapter"=>"postgresql", "encoding"=>"utf8", 
"database"=>"app_test", "pool"=>5, "username"=>nil, "password"=>nil} 

у меня все еще есть моя development.sqlite3 и text.sqlite3 может быть проблема? Что нужно сделать?

вот моя полная суть:https://gist.github.com/1522188

3 57

3 ответа:

добавьте имя пользователя в свой database.yml, можно также использовать имя вашего приложения (или какой-то вариант имени) в качестве имени пользователя, я буду использовать app_name в качестве заполнителя:

development:
  adapter: postgresql
  encoding: utf8
  database: app_development
  pool: 5
  username: app_name
  password:

затем создайте пользователя (он же "роль") внутри PostgreSQL с помощью psql.exe:

$ psql -d postgres
postgres=# create role app_name login createdb;
postgres=# \q

первая строка в вашем терминале, следующие два находятся внутри psql. Тогда делай свое rake db:create.

The User пользователь, возможно, по умолчанию, но user уже забрали для другие цели в PostgreSQL, поэтому вам придется цитировать его, чтобы сохранить случай, если вы хотите использовать User имя пользователя:

postgres=# create role "User" login createdb;

в любом случае вам лучше создать одного пользователя для каждого приложения.

вы хотите сделать подобные вещи для вашего test вход в database.yml как хорошо.

PostgreSQL попытается создать базу данных с вашим именем учетной записи (логина), если a username Не указан в вашей config/database.yml. На OS X и Linux вы можете видеть, кто это с whoami. Похоже, вы используете Windows.

Решение A: создать пользователя PostgreSQL это соответствует тому, что он ищет. Например

createuser --superuser some_user

B Решение: Измените пользователя БД, явно установив имя пользователя как показано в МЮ ответ.

Если у вас есть определенная учетная запись/пользователь на вашем компьютере для postgres называется postgres например.

после выполнения этой команды появится запрос на ввод имени роли.

sudo -u postgres createuser --interactive

затем делаю

rake db:create

должно работать!