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

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

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

 FATAL:  role "postgres" does not exist

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

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

Ответ 1

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

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

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

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

Ответ 2

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

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

createuser -s -r postgres

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

Ответ 3

Недавно я получил эту проблему сразу после установки 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
Здесь вам нужно ввести пароль, если вы его предоставили, при создании пользователя.

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

Ответ 4

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

Ответ 5

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

sovanlandy=# CREATE ROLE postgres LOGIN;

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

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

sovanlandy=# ALTER ROLE postgres LOGIN;

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

Ответ 6

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

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

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

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

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

$createdb myapp_development

Repleace "myapp" для вашего имени приложения

Ответ 7

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

Ответ 8

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

Ответ 9

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

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

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

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

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

Ответ 10

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

rails new blog -d postgresql

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

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

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

Ответ 11

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

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

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

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

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

Ответ 12

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

Ответ 13

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

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

sudo -i -u postgres

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

createuser --interactive

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

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