Ошибка PostgreSQL: Fatal: роль «имя пользователя» не существует

564

Я настраиваю свой PostgreSQL 9.1. Я не могу ничего сделать с PostgreSQL: не могу createdb, не может createuser; все операции возвращают сообщение об ошибке

Fatal: role h9uest does not exist

h9uest - мое имя учетной записи, а я sudo apt-get install PostgreSQL 9.1 в этой учетной записи.
Аналогичная ошибка сохраняется для учетной записи root.

  • 1
    После этого вы можете столкнуться с FATAL: role "user" is not permitted to log in , проверьте dba.stackexchange.com/questions/57723/… для этого.
  • 14
    Я ответил на этот вопрос здесь . Прочтите также это руководство " Как установить Postgres для Ubuntu Linux ".
Показать ещё 3 комментария
Теги:
authentication

12 ответов

589
Лучший ответ

Используйте пользователя postgres операционной системы для создания вашей базы данных - если вы не настроили роль базы данных с необходимыми привилегиями, соответствующими пользователю вашей операционной системы с таким же именем (h9uest в вашем случае):

sudo -u postgres -i

Как рекомендуется здесь или здесь.

Тогда попробуйте еще раз. Напечатайте exit когда закончите с работой как системный пользователь postgres.

Или выполните одну команду createuser как postgres с sudo, как продемонстрировано drees в другом ответе.

Смысл заключается в том, чтобы использовать пользователя операционной системы, совпадающего с ролью базы данных с тем же именем, для предоставления доступа через ident аутентификацию. postgres - это пользователь операционной системы по умолчанию, который инициализировал кластер базы данных. Руководство:

Для начальной загрузки системы базы данных, недавно инициализированная система всегда содержит одну предопределенную роль. Эта роль всегда является "суперпользователем", и по умолчанию (если она не изменена при запуске initdb) она будет иметь то же имя, что и пользователь операционной системы, который инициализировал кластер базы данных. Обычно эта роль будет называться postgres. Чтобы создать больше ролей, сначала необходимо подключиться к этой начальной роли.

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

Читайте о ролях базы данных и аутентификации клиента в руководстве.

237

После попытки решения многих других народов и без успеха этот ответ, наконец, помог мне.

https://stackoverflow.com/questions/16973018/createuser-could-not-connect-to-database-postgres-fatal-role-tom-does-not-e

Короче говоря, работая

sudo -u postgres createuser owning_user

создает роль с именем owning_user (в данном случае h9uest). После этого вы можете запустить rake db:create из терминала под любым именем учетной записи, которое вы создали, без необходимости входить в среду postgres.

  • 26
    Если после этого вы получите ошибку «Недостаточно прав», вы можете добавить флаг -s к вышеприведенной команде. Это создаст вашего нового пользователя в качестве суперпользователя. Пожалуйста, имейте в виду последствия для безопасности, если вы решите это сделать.
  • 0
    как это сделать с доморощенным?
Показать ещё 4 комментария
106
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
    Я только что сделал новую установку PostgreSQL 9.4.4 и смог использовать следующее для создания нового суперпользователя: CREATE ROLE username superuser createdb login; который сочетает в себе все три шага ...
  • 21
    # БОЛЬШОЙ КОРЕНЬ для меня; ОШИБКА: роль "корень" не существует
Показать ещё 1 комментарий
70

Установка postgres с помощью apt-get не создает роль пользователя или базу данных.

Чтобы создать роль суперпользователя и базу данных для вашей личной учетной записи пользователя:

sudo -u postgres createuser -s $(whoami); createdb $(whoami)

  • 1
    Мне нужно было запустить вторую часть как: sudo -u postgres createdb $(whoami)
  • 2
    @SanD Если вы создали свою собственную учетную запись как суперпользователь (с помощью флага -s в первой команде), вы можете создать базу данных как вы сами. Вам не нужно будет запускать createdb как postgres .
63

Это работает для меня:

psql -h localhost -U postgres
  • 0
    пожалуйста, добавьте пароль для вышеуказанного пользователя.
  • 0
    @ Vincent, если пароль никогда не менялся после установки PostgreSQL, по умолчанию это postgres (протестировано в Linux и Windows).
8

Рабочий метод,

  • vi /etc/postgresql/9.3/main/pg_hba.conf
  • local all postgres peer здесь измените равноправный на доверие
  • перезагрузка, sudo service postgresql restart

  • теперь попробуйте, psql -U postgres

4

Я установил его на 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

4

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

sudo -u postgres createuser <local username>

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

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

Выше шаги решили проблему для меня. Если нет, отправьте сообщения о терминалах для вышеуказанных шагов.

1

Создание кластера БД вручную решило проблему в моем случае.

По какой-то причине, когда я установил postgres, "исходная БД" не была создана. Выполнение initdb мне.

Это решение представлено в PostgreSQL Wiki - Первые шаги:

initdb

Обычно установка postgres в вашей ОС создает "начальную БД" и запускает демон сервера postgres. Если нет, то вам нужно запустить initdb

1

Следуйте этим шагам, и это сработает для вас:

  • run msfconsole
  • Тип db_console
  • Некоторая информация будет показана вам, вы выбрали информацию, которая говорит вам сделать: db_connect user:pass@host:port.../database извините, я не помню, но он как этот, затем заменяет пользователя и пароль, а также хост и базу данных информацией включен в database.yml в пространстве: /usr/share/metasploit-framework/config
  • вы увидите. пересоздание кэша модели в фоновом режиме.
  • Введите apt-get update && & & apt-get upgrade после обновления перезапустите терминал и обеденный msfconsole, и он работает, вы можете проверить, что, введя msfconsole: msf>db_status, вы увидите, что он подключен.
0

Для версии Postgres 9.5 используйте следующую команду:

psql -h localhost -U postgres

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

-5

Удаление всего и сохранение 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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню