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

734

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

Fatal: role h9uest does not exist

h9uestэто имя моей учетной записи, и я sudo apt-get installPostgreSQL 9.1 под этой учетной записью.
Подобная ошибка сохраняется для rootучетной записи.

h9uest
источник
1
После этого вы можете столкнуться FATAL: role "user" is not permitted to log in, проверить dba.stackexchange.com/questions/57723/... для этого.
Кв
19
Я ответил на этот вопрос здесь . Прочтите также это руководство " Как установить Postgres для Ubuntu Linux ".
ruzenhack
@Ruzenhack эта учебная ссылка была именно то, что мне нужно! Очень ясно и просто
Двандерсон
4
psql -h localhost -U postgres
Метин Аталай
Если вы получили ошибку role doesn't existИ ошибку, can't create role, it already existsпроверьте этот ответ: stackoverflow.com/a/56658832/1689770
Джонатан

Ответы:

775

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

sudo -u postgres -i

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

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

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

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

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

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

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

Эрвин Брандштеттер
источник
1
Невозможно запустить sudo etcкак пользователь postgres ... Как установить программу? Смотрите эту проблему установки S2geometry .
Питер Краусс
В зависимости от конфигурации, может понадобиться просто su postgres.
Фабьен Снауварт
1
sudo -u postgresне работает, а sudo -u postgres -iработает! Что делает -iфлаг?
парсер
1
@parsecer: запускается интерактивная оболочка, аналогичная su, но основанная на привилегиях sudo. См man sudo.
Эрвин Брандштеттер
284

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

https://stackoverflow.com/a/16974197/2433309

Короче бегом

sudo -u postgres createuser owning_user

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

Дреес
источник
29
Если после этого вы получите ошибку «Недостаточно прав», вы можете добавить флаг -s к вышеуказанной команде. Это создаст вашего нового пользователя в качестве суперпользователя. Пожалуйста, имейте в виду последствия для безопасности, если вы решите это сделать.
Саринк
1
Я получаю "недостаточно прав", но теперь я получаю ОШИБКУ: бросок "имя пользователя" уже существует.
Уильям Джадд
5
@ConnorLeech Вы можете заменить postgres именем вашего суперпользователя PG. В моем случае это было мое имя.
myfashionhub
1
Я также должен был использовать -s, и не нужно было использовать sudo -u postgres(просто createuser new_userработал нормально)
Meekohi
2
psql: FATAL: role "jonny" does not existХорошо, sudo -u postgres -s createuser jonnyтогда почему createuser: creation of new role failed: ERROR: role "jonny" already exists
Джонатан
134
sudo su - postgres

psql template1

создание роли в pgsql с привилегией «superuser»

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; объединяет все три шага ...
iPad Guy
25
# БОЛЬШОЙ КОРЕНЬ мне ОШИБКА: роли «root» не существует
шейкер
6
более простая версия: sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Зак Эстела
2
@shacker#GRANT postgres TO username
7kemZmani
Я использую root для запуска сервера, затем `` `psql -U postgres -h 127.0.0.1 --command" CREATE USER postgresondocker С ПАРОЛЕМ SUPERUSER 'postgresondocker'; " && \ creationb -O postgresondocker postgresondocker`` можно ли использовать root для этого, если я добавлю его в pg_ident?
Шиванги Сингх
85

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

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

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

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

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

psql -h localhost -U postgres
mateusz.szymborski
источник
пожалуйста, добавьте пароль для вышеуказанного пользователя.
Чаудхри Вакас
1
@ Vincent, если пароль никогда не менялся после установки PostgreSQL, по умолчанию это так postgres(проверено в Linux и Windows).
silvioprog
1
role postgres does not exist
Джейкоб Шнайдер
15

Метод работы,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer здесь изменить пэр в доверие
  3. запустить снова, sudo service postgresql restart

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

Мохидин бен Мухаммед
источник
1
Должно быть очевидно, что этот trustметод рекомендуется только в полностью защищенной среде. Хотя доступ из ненадежных соединений возможен, никогда не подвергайте свой кластер БД таким образом.
Эрвин Брандштеттер
это хорошо
хорошо о
Проверьте: если служба postgresql не запущена, возможно, в файле может быть какая-то ошибкаpg_hba.conf
Прогулка
11

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

psql -h localhost -U postgres

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

Калян Хальдер Рааз
источник
11
psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;
Абель
источник
4
psql postgresрезультаты:psql: FATAL: role "root" does not exist
TomSawyer
2
psql postgres -U postgres? Зависит от пользователя (-U) у вас есть.
Медоуарк Брэдшер
благодарю вас! Я изо всех сил пытался сделать резервную копию postgresql с рутом, так как я не знаю пароль postgres
Дика
7

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

sudo -u postgres createuser <local username>

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

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

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

Роберт Камбил
источник
3

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

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

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

initdb

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

Natacha
источник
2

Для пользователей Windows :psql -U postgres

Вы должны увидеть интерфейс командной строки для PostgreSQL: postgres=#

Андрей Толстой
источник
0

Выполните эти шаги, и это будет работать для вас:

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

сбросить и восстановить с --no-owner --no-privilegesфлагами

например

сбросить - pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

восстановить - pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

srghma
источник