Rails и PostgreSQL: роль postgres не существует


106

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

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

 FATAL:  role "postgres" does not exist

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

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


Для тесно связанной проблемы, когда пользователь БД (= роль) postgresне был создан, что может привести к тому же сообщению об ошибке, см. Соответствующий вопрос: stackoverflow.com/questions/11919391/…
— Эрвин Брандштеттер

Ответы:


12

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

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

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

Может быть, сообщение действительно пришло с удаленного сервера?


Вот и все - у меня возникли проблемы с запуском postgresql в период работы, поэтому я сделал новую установку, поэтому сейчас у меня должна быть пара экземпляров. Однако изменил порт в файле database.yml, и все заработало. Спасибо за вашу помощь!
— Адам

не работал даже после очистки всех изображений - docker rmi $(docker images -q) --force. но вопрос был на volumesя догадываюсь
— prayagupd

267

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

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

createuser -s -r postgres

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


8
Мне пришлось использовать, sudo su - postgresпрежде чем эта команда сработала для меня. Спасибо!
— Коннор Лич

2
Не знаю, как возникла моя настройка, но у меня был postgresql, созданный без пользователя и роли postgres, myUser как единственный пользователь, но я отказался впустить меня под предлогом того, что база данных с именем myUser не существует! это разгаданная часть хаоса!
— Джером

@StuartNelson: Похоже, это решение общей проблемы ( здесь то же самое ). Но это явно не ответ на этот вопрос. ОП четко заявляет, что роль существовала в его БД.
— Эрвин Брандштеттер,

За исключением того, что вы объединяете роли с пользователями. Пользователь существовал, а роли нет - он четко говорит, что существует пользователь , а не роль.
— Крис Шерлок

-rВариант не является необходимым с -sопцией. Суперпользователь включает атрибут «Создать роль».
— Деннис

26

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

createuser -s -U $ ПОЛЬЗОВАТЕЛЬ

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

Я был на 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 флаг).

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


2
Вы можете сократить первые две строки до sudo su postgres.
— 6ft Dan

Это также было решением для меня на ubuntu, не забудьте обновить свой database.yml, чтобы использовать то же имя пользователя, что и выше
— Crobicha

10

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

sovanlandy=# CREATE ROLE postgres LOGIN;

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

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

sovanlandy=# ALTER ROLE postgres LOGIN;

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


4

В документации Heroku; Начинаю с рельсов 4, мол:

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

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

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

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

$createdb myapp_development

Замените myapp в названии вашего приложения


2

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


2

Процедура установки создает учетную запись пользователя, postgresкоторая связана с ролью Postgres по умолчанию. Чтобы использовать Postgres, вы можете войти в эту учетную запись. Но если это не указано явно, приложение rails ищет другую роль, в частности роль, имеющую ваше имя пользователя unix, которая может не быть создана в ролях postgres.

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

sudo -i -u postgres

После входа в учетную запись postgres вы можете создать нового пользователя с помощью команды:

createuser --interactive

Это предложит вам несколько вариантов выбора и, на основе ваших ответов, выполните правильные команды Postgres для создания пользователя.

Передайте имя роли и некоторые разрешения, и роль будет создана, затем вы можете перенести свой db


1

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


1

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

sudo -u postgres createuser имя пользователя

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

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

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


0

Я оказался здесь после попытки следовать руководству Райана Бэйта по развертыванию на AWS EC2 с помощью Rubber. Вот что со мной произошло: мы создали новое приложение, используя "

rails new blog -d postgresql

Очевидно, это создает новое приложение с pg в качестве базы данных, но база данных еще не была создана. С sqlite вы просто запускаете rake db: migrate, однако с pg вам нужно сначала создать базу данных pg. Райан не сделал этого шага. Команда rake db:create:all, тогда мы можем запуститьrake db:migrate

Вторая часть - это изменение файла database.yml. По умолчанию имя пользователя при создании файла - appname. Однако есть вероятность, что ваша роль администратора postgresql отличается (по крайней мере, для меня). Я изменил его на свое имя (см. Выше совет по созданию имени роли), и все готово.

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


0

После кучи установки и удаления Postgres вот что, похоже, теперь стабильно работает для меня с Os X Mavericks, Rails 4 и Ruby 2.

  1. В файле database.yml я меняю имена пользователей по умолчанию на имя пользователя моего компьютера, которое для меня просто «admin».

  2. В командной строке запускаю rake db: create: all

  3. Затем я запускаю rake db: migrate

  4. Когда я запускаю сервер rails и проверяю локальный хост, он говорит: «Добро пожаловать на борт».


0

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.