Роль не существует и не удается создать базу данных при использовании PostgreSQL
Я использую Heroku для своего приложения, и для него требуется PostgreSQL, но вы все равно можете использовать SQLite3 для разработки. Поскольку Heroku настоятельно рекомендовал не иметь 2 разных баз данных, я решил перейти на PostgreSQL для разработки. Я установил gem pg
, а также отправился на официальный сайт PostgreSQL, чтобы получить установщик Windows, а также изменил мой database.yml
. Во время установки он требует пароль для PostgreSQL, поэтому я его создал.
Мне пришлось изменить файл pg_hba.conf
с помощью 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
present, может быть, проблема? Что нужно сделать?
Вот мой полный смысл: https://gist.github.com/1522188
Ответы
Ответ 1
Добавьте имя пользователя в свой database.yml
, также можете использовать ваше имя приложения (или некоторый вариант имени) в качестве имени пользователя, я буду использовать app_name
в качестве заполнителя:
development:
adapter: postgresql
encoding: utf8
database: app_development
pool: 5
username: app_name
password:
Затем создайте пользователя (роль "AKA" ) внутри PostgreSQL, используя psql.exe
:
$ psql -d postgres
postgres=# create role app_name login createdb;
postgres=# \q
Первая строка находится в вашем терминале, а следующие две - внутри psql
. Затем сделайте свой rake db:create
.
Пользователь User
, возможно, по умолчанию, но User
уже принят для других целей в PostgreSQL, поэтому вам придется процитировать его, чтобы сохранить это дело если вы хотите использовать User
в качестве имени пользователя:
postgres=# create role "User" login createdb;
В любом случае вам лучше создать один пользователь для каждого приложения.
Вы также захотите сделать аналогичные вещи для своей записи test
в database.yml
.
Ответ 2
PostgreSQL попытается создать базу данных с вашим именем учетной записи (login), если username
не указано username
. На OS X и Linux вы можете увидеть, кто это с whoami
. Похоже, вы используете Windows.
Решение A:
Создайте пользователя PostgreSQL, который соответствует тому, который он ищет. Например
createuser --superuser some_user
Решение B:
Измените пользователя БД, явно указав имя пользователя как показано в ответе mu.
Ответ 3
Если у вас есть определенная учетная запись/пользователь на вашем компьютере для postgres, называемых postgres, например.
Затем выполнение этой команды приведет к приглашению ввести имя роли.
sudo -u postgres createuser --interactive
Затем выполните
rake db:create
Должен работать!