Роль не существует и не может создать базу данных при использовании PostgreSQL - PullRequest
59 голосов
/ 27 декабря 2011

Я использую 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, может ли это быть проблемой? Что должно быть сделано?

Вот мой полный смысл: https://gist.github.com/1522188

Ответы [ 3 ]

130 голосов
/ 27 декабря 2011

Добавьте имя пользователя к вашему 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.

7 голосов
/ 10 февраля 2016

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

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

createuser --superuser some_user

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

6 голосов
/ 07 июня 2017

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

Затем, выполнив эту команду, вы получите приглашение ввести имя роли.

sudo -u postgres createuser --interactive

Затем делаем

rake db:create

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...