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 для создания пользователя.
Передав имя роли и некоторые разрешения, и роль будет создана, вы можете перенести свою базу данных