ПРИМЕЧАНИЕ. Если вы установили postgres с помощью homebrew, см. комментарий от @user3402754 ниже.
Обратите внимание, что сообщение об ошибке делает НЕ говорить об отсутствующей базе данных, это говорит об отсутствующей роли. Позже в процессе входа в систему он также может наткнуться на отсутствующую базу данных.
Но первый шаг — проверить отсутствующую роль: каков результат внутри psql команды du ? В моей системе Ubuntu соответствующая строка выглядит так:
List of roles
Role name | Attributes | Member of
-----------+-----------------------------------+-----------
postgres | Superuser, Create role, Create DB | {}
Если нет хотя бы одной роли с superuser, то у тебя проблемы 🙂
Если он есть, вы можете использовать его для входа в систему. И глядя на результат вашего l команда: разрешения для user на template0 и template1 базы данных такие же, как в моей системе Ubuntu для суперпользователя postgres. Поэтому я думаю, что ваша установка проста в использовании user как суперпользователь. Итак, вы можете попробовать эту команду для входа в систему:
sudo -u user psql user
If user действительно является суперпользователем БД, вы можете создать для него другого суперпользователя БД и частную пустую базу данных:
CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;
Но поскольку ваша установка postgres.app этого не делает, вы также не должны этого делать. Простая адаптация учебника.
Вопрос:
Я настраиваю Postgresql для использования с Rails-приложением, но, похоже, я не могу подключиться к базе данных (или правильно настроить) (ошибки, которые я получаю после запуска Rails-сервера: ActiveRecord::NoDatabaseError и could not translate host name "MyProfile" to address: nodename nor servname provided, or not known).
Я собираю из множества других вопросов по этой теме, которые мне нужно переключить или создать роль “MyComputer”, однако я заметил, что все они требуют использования команды psql. Когда я запускаю даже просто psql я снова получаю ошибку FATAL: role "MyProfile" does not exist.
До сих пор я следил за процессом установки Heroku и застрял здесь (или, точнее, здесь, после установки, где Heroku говорит, что работающий psql -h localhost должен работать). Я пропустил очевидный шаг здесь/что-то не так?
Я также пробовал:
sudo su - MyProfile
вариации sudo -u postgres createuser owning_user
и еще пару команд, чтобы создать этот рулон/пользователь, но я не могу понять, что мне нужно для решения проблемы.
РЕДАКТИРОВАТЬ
Я также запускаю ps aux | grep postgres ps aux | grep postgres и похоже, что все PID, связанные с чем-либо postgres, работают под “MyProfile” (при условии, что я правильно его читаю). Но команда psql все еще возвращает, что роль не существует. #грустное лицо
EDIT 2
Я только что открыл приложение Postgres и нажал кнопку “Открыть psql”. Он открыл терминал, '/Applications/Postgres.app/Contents/Versions/9.5/bin'/psql -p5432 команду ('/Applications/Postgres.app/Contents/Versions/9.5/bin'/psql -p5432), а затем дал мне ту же ошибку (psql: FATAL: role "MyProfile" does not exist). Что, возможно, предлагает мне, что это проблема системы, а не проблема с Rails?
Редактировать 3
Это, безусловно, проблема pg, а не проблема с рельсами. Я просто удалил приложение, переустановил его с помощью SQLite (yucks), запустил локальный сервер и получил тестовую целевую страницу. Поэтому проблема связана с моей локальной машиной, но не с самим приложением. Удаленный тег RoR и все еще ищет ответы от гуру Postgres о том, почему проблема с ролью сохраняется 🙂
Лучший ответ:
Какой беспорядок… Одна вещь, о которой я забыл упомянуть, вероятно, была бы астрономически полезной для сообщества, так это то, что я перехватываю кому-то еще машину. Были затяжные настройки, которые просто решили, что они не будут играть красиво.
В конце дня я избавился от Postgress.app, установил postgres с Homebrew, и баланс того, что мне нужно, был здесь: http://exponential.io/blog/2015/02/21/install-postgresql- на Mac-OS-X-через-варку/
В частности, строка, которая меня спасла, была createdb 'whoami' (см. Фактическую запись… синтаксис немного отличается от того, что я только что написал из-за форматирования stackoverflow)… в ретроспективе это кажется очевидным, но это помогло моему текущему протоколу в пользовательском режиме прервать пресеты другого унаследованного пользователя, фактически создав базу данных, которую psql искал всю установку.
Урок выучен!
Спасибо за помощь @max, помогли мне избежать другой проблемы, которую я тоже собирался вызывать!
Ответ №1
Если вы используете Postgres.app вы должны оставить имя пользователя и пароль из config/database.yml. Также эта ошибка говорит вам, что вы ввели MyProfile не как пользователь (или роль в языке PG), а как хост для подключения к базе данных (вместо localhost).
Это действительно все, что вам нужно в config/database.yml чтобы запустить Postgres.app:
default: &default
adapter: postgresql
encoding: unicode
# For details on connection pooling, see rails configuration guide
# http://guides.rubyonrails.org/configuring.html#database-pooling
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
development:
<<: *default
database: myapp_development
test:
<<: *default
database: myapp_test
Его часто хорошая идея оставить его урезанным и позволить дураку, который абсолютно должен иметь пароль на своем сервере postgres dev, использует DATABASE_URL env var.
Ответ №2
Я столкнулся с похожими проблемами при установке нового приложения Rails с Postgresql. Я получил следующие сообщения об ошибках ниже
FATAL: role "promisepreston" does not exist
Couldn't create 'MyBlog_development' database. Please check your configuration.
rails aborted!
ActiveRecord::NoDatabaseError: FATAL: role
Caused by:
PG::ConnectionBad: FATAL: role "promisepreston" does not exist
Чтобы решить эту проблему, просто следуйте приведенному ниже решению
Сначала нам нужно войти в учетную запись пользователя postgres через интерфейс командной строки;
sudo su - postgres
Затем подключитесь к серверу базы данных с помощью клиента psql в качестве роли postgres:
psql -U postgres
Добро пожаловать в psql 10.6, интерактивный терминал PostgreSQL.
postgres@Preston-PC:~$ psql -U postgres
psql (10.6 (Ubuntu 10.6-0ubuntu0.18.04.1))
Type "help" for help
postgres=#
Затем, связавшись с клиентом psql, хорошо создайте роль с нашим желаемым rolename, которая имеет атрибут LOGIN и наш желаемый пароль, и которая может создавать базы данных и управлять ролями (N/B: Пожалуйста, не вводите этот postgres = #, так как он заполнитель):
postgres=# create role rolename with createdb login password 'password1';
Обратите внимание на обязательную точку с запятой (;) в конце инструкции SQL. Одинарные кавычки (‘‘) не являются частью пароля, но должны содержать его.
Это сработало? Вы можете проверить с помощью команды du (N/B: Пожалуйста, не вводите этот postgres = #, так как он является заполнителем):
postgres=# du
Теперь вы можете запустить команду для создания базы данных для вашего приложения Rails;
rails db:create
А затем также выполните команду для переноса базы данных для вашего приложения Rails;
rails db:migrate
Это все.
надеюсь, это поможет
Я настраиваю свой PostgreSQL 9.1. Я не могу ничего сделать с PostgreSQL: не могу createdb, не может createuser; все операции возвращают сообщение об ошибке
Fatal: role h9uest does not exist
h9uest — мое имя учетной записи, а я sudo apt-get install PostgreSQL 9.1 в этой учетной записи.
Аналогичная ошибка сохраняется для учетной записи root.
Ответ 1
Используйте postgres пользователя операционной системы для создания вашей базы данных — если вы не настроили роль базы данных с необходимыми привилегиями, соответствующими пользователю вашей операционной системы с таким же именем (h9uest в вашем случае):
sudo -u postgres -i
Как рекомендуется здесь или здесь.
Тогда попробуйте еще раз. Напечатайте exit когда закончите с работой как системный пользователь postgres
Или выполните одну команду createuser как postgres с sudo, как продемонстрировано drees в другом ответе.
Смысл заключается в том, чтобы использовать пользователя операционной системы, совпадающего с ролью базы данных с тем же именем, для предоставления доступа через ident аутентификацию. postgres — это пользователь операционной системы по умолчанию, который инициализировал кластер базы данных. Руководство:
Для начальной загрузки системы базы данных, недавно инициализированная система всегда содержит одну предопределенную роль. Эта роль всегда является «суперпользователем», и по умолчанию (если она не изменена при запуске
initdb) она будет иметь то же имя, что и пользователь операционной системы, который инициализировал кластер базы данных. Обычно эта роль будет называтьсяpostgres. Чтобы создать больше ролей, сначала необходимо подключиться к этой начальной роли.
Я слышал о странных настройках с нестандартными именами пользователей или о том, где пользователь операционной системы не существует. Вам нужно будет адаптировать свою стратегию там.
Читайте о ролях базы данных и аутентификации клиента в руководстве.
Ответ 2
После попытки решения многих других народов и без успеха этот ответ, наконец, помог мне.
fooobar.com/questions/13172/…
Короче говоря, работая
sudo -u postgres createuser owning_user
создает роль с именем owning_user (в данном случае h9uest). После этого вы можете запустить rake db:create из терминала под любым именем учетной записи, которое вы создали, без необходимости входить в среду postgres.
Ответ 3
sudo su - postgres
psql template1
создание роли на pgsql с привилегией как «суперпользователь»
CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;
Затем создайте пользователя
CREATE USER username;
eg. CREATE USER demo;
Назначить пользователю привилегию
GRANT ROOT TO username;
И затем включите логин этого пользователя, так что вы можете запустить, например: psql template1, с обычного терминала $:
ALTER ROLE username WITH LOGIN;
Ответ 4
Установка postgres с помощью apt-get не создает роль пользователя или базу данных.
Чтобы создать роль суперпользователя и базу данных для вашей личной учетной записи пользователя:
sudo -u postgres createuser -s $(whoami); createdb $(whoami)
Ответ 5
Это работает для меня:
psql -h localhost -U postgres
Ответ 6
Рабочий метод,
-
vi /etc/postgresql/9.3/main/pg_hba.conf -
local all postgres peer
здесь измените равноправный на доверие -
перезагрузка,
sudo service postgresql restart -
теперь попробуйте,
psql -U postgres
Ответ 7
Я установил его на macOS и должен был:
cd /Applications/Postgres.app/Contents/Versions/9.5/bin
createuser -U postgres -s YOURUSERNAME
createdb YOURUSERNAME
Вот источник: https://github.com/PostgresApp/PostgresApp/issues/313#issuecomment-192461641
Ответ 8
В приглашении локального пользователя, а не в командной строке пользователя root, введите
sudo -u postgres createuser <local username>
Затем введите пароль для локального пользователя.
Затем введите предыдущую команду, в которой генерируется «имя пользователя» роли. «
Выше шаги решили проблему для меня.
Если нет, отправьте сообщения о терминалах для вышеуказанных шагов.
Ответ 9
Для версии Postgres 9.5 используйте следующую команду:
psql -h localhost -U postgres
Надеюсь, это поможет.
Ответ 10
Создание кластера БД вручную решило проблему в моем случае.
По какой-то причине, когда я установил postgres, «исходная БД» не была создана. Выполнение initdb мне.
Это решение представлено в PostgreSQL Wiki — Первые шаги:
initdb
Обычно установка postgres в вашей ОС создает «начальную БД» и запускает демон сервера postgres. Если нет, то вам нужно запустить initdb
Ответ 11
Следуйте этим шагам, и это сработает для вас:
- run
msfconsole - Тип db_console
- Некоторая информация будет показана вам, вы выбрали информацию, которая говорит вам сделать:
db_connect user:[email protected]:port.../databaseизвините, я не помню, но он как этот, затем заменяет пользователя и пароль, а также хост и базу данных информацией включен вdatabase.ymlв пространстве:/usr/share/metasploit-framework/config - вы увидите. пересоздание кэша модели в фоновом режиме.
- Введите apt-get update && & & apt-get upgrade после обновления перезапустите терминал и обеденный msfconsole, и он работает, вы можете проверить, что, введя
msfconsole: msf>db_status, вы увидите, что он подключен.
Ответ 12
psql postgres
postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;
Ответ 13
Для пользователей Windows: psql -U postgres
Вы должны увидеть интерфейс командной строки для PostgreSQL: postgres=#
Ответ 14
сбросить и восстановить с помощью --no-owner --no-privileges flags
например
dump — pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:[email protected]:5432/schemaname >/tmp/full.dump
restore — pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:[email protected]:5432/schemaname/tmp/full.dump
Ответ 15
Удаление всего и сохранение Postgres.app:
brew cask uninstall postgres
brew uninstall postgres
brew cask install postgres
rm -rf /Applications/Postgres93.app/
# shutdown any postgres instance
# open postgres.app -> "Initialize"
Мне нужен PostgreSQL 9.6