Rails и PostgreSQL: роли postgres не существует - PullRequest
103 голосов
/ 23 октября 2011

Я установил PostgreSQL на моем Mac OS Lion и работаю над приложением rails.Я использую RVM, чтобы отделить все от других приложений Rails.

По какой-то причине, когда я пытаюсь перенести базу данных в первый раз, rake не может найти пользователя postgres.Я получаю сообщение об ошибке

 FATAL:  role "postgres" does not exist

У меня есть pgAdmin, поэтому я четко вижу, что в БД есть пользователь postgres - фактически учетная запись администратора - поэтому я не уверен, что еще делать.

Я где-то читал о людях, имеющих проблемы с PostgreSQL из-за того, по какому пути он был установлен, но тогда я не думаю, что смог бы зайти так далеко, если бы не смог найти базу данных.

Ответы [ 12 ]

251 голосов
/ 08 октября 2012

На самом деле, по какой-то неизвестной причине, я обнаружил, что проблема на самом деле в том, что роль postgresql не была создана.

Попробуйте запустить:

createuser -s -r postgres

Обратите внимание, что роли - это способ, которым PostgreSQL поддерживает разрешения для базы данных . Если для пользователя postgres нет роли, он не может получить к нему доступ. Команда createuser представляет собой тонкую оболочку вокруг команд CREATE USER, CREATE ROLE и т. Д.

26 голосов
/ 12 августа 2012

Недавно у меня возникла эта проблема сразу после установки postgres.Если это происходит сразу после установки, вам может не хватать пользователя по умолчанию, postgres.В этом случае вы можете создать пользовательский postgres по умолчанию, используя следующую команду:

createuser -s -U $ USER

Ex: createuser -s -U $USER
enter your required role name: postgres
enter password for your the user: 

Он предложит вам ввести необходимую базу данныхИмя роли и пароль После завершения процесса вы можете войти в консоль postgres, используя следующую команду

psql -U 'your_database_name'

Пример: psql -U postgres
Здесь вам необходимо ввести пароль, если вы далилюбой, при создании пользователя.

Надеюсь, это поможет:)

22 голосов
/ 16 июня 2013

Я был на OSX 10.8, и все, что я пробовал, дало бы мне FATAL: role "USER" does not exist.Как многие говорили здесь, запустите createuser -s USER, но это дало мне ту же ошибку.Это, наконец, сработало для меня:

$ sudo su
# su postgres
# createuser -s --username=postgres MYUSERNAME

createuser -s --username=postgres создает суперпользователя (флаг -s), подключаясь как postgres (--username = postgres flag).

Я вижу, что на ваш вопрос ответили, но я хочу добавить этот ответ для людей, использующих OSX, пытающихся установить PostgreSQL 9.2.4.

12 голосов
/ 23 октября 2011

Это сообщение появляется, когда пользователя базы данных не существует.Сравните руководство здесь .
Несколько локальных баз данных не могут быть объяснением.Роли действительны для всего кластера.Руководство снова :

Обратите внимание, что роли определены на уровне кластера базы данных и поэтому действительны во всех базах данных в кластере.

Вы должны оказаться в другом database-cluster .Это будет другой сервер, работающий на той же машине, который прослушивает другой порт.Или, скорее, на другой машине.

Может быть, сообщение фактически приходит с удаленного сервера?

10 голосов
/ 25 февраля 2013

Я столкнулся с этой проблемой, когда впервые установил приложение POSTGRES.app в Heroku. После одного утреннего проб и ошибок я думаю, что эта строка кода решает проблему. Как описано ранее, это связано с тем, что postgresql не имеет роли по умолчанию при первой установке. И мы должны установить это.

sovanlandy=# CREATE ROLE postgres LOGIN;

Вы должны войти в соответствующую консоль psql, чтобы использовать эту команду psql.

Также отмечено, что, если вы уже создали роль 'postgre', но по-прежнему получаете ошибки прав доступа, вам необходимо изменить команду:

sovanlandy=# ALTER ROLE postgres LOGIN;

Надеюсь, это поможет!

4 голосов
/ 21 ноября 2013

в документации Heroku; Приступая к работе с рельсами 4, они говорят:

Вам также необходимо удалить поле username в вашем database.yml если есть так: в файле config / database.yml удали: username: MyApp

Затем вы просто удаляете эту строку в "development:", если pg не сообщает базе данных, которая работает под ролью "myapp"

Эта строка сообщает rails, что база данных myapp_development должна быть работать под ролью myapp. Поскольку у вас, вероятно, нет этой роли в Вашу базу данных мы удалим. С линии удаления Rails попробую получить доступ к базе данных как пользователь, который в настоящее время вошел в компьютер.

Также не забудьте создать базу данных для разработки:

$createdb myapp_development

Введите "myapp" для названия вашего приложения

2 голосов
/ 23 октября 2011

Не могли бы вы иметь несколько локальных баз данных? Проверьте database.yml и убедитесь, что вы нажимаете на нужную вам pg db. Для подтверждения используйте rails console.

1 голос
/ 21 июня 2015

В командной строке локального пользователя Ubuntu, но не root, введите

sudo -u postgres createuser username

имя пользователя выше должно соответствовать имени, указанному в сообщении «FATAL: роль« username »не существует».

Введите пароль для имени пользователя.

Затем введите команду, что созданная роль не существует сообщения.

1 голос
/ 18 марта 2014

Мой ответ был намного проще. Просто перешел в папку db и удалил столбец id, который я пытался создать принудительно, но который фактически создается автоматически. Я также удалил имя пользователя в файле database.yml (в папке config).

0 голосов
/ 09 октября 2014

Вы можете обойти это, запустив initdb -U postgres -D /path/to/data или запустив его как пользователь postgres, так как по умолчанию это текущий пользователь. GL! * * 1002

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