Помилка PostgreSQL: Fatal: роль "ім'я користувача" не існує


731

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

Fatal: role h9uest does not exist

h9uest- це ім’я мого облікового запису, і я sudo apt-get installPostgreSQL 9.1 під цим обліковим записом.
Подібна помилка зберігається для rootоблікового запису.


1
Після цього ви можете зіткнутися FATAL: role "user" is not permitted to log in, перевірте для цього dba.stackexchange.com/questions/57723/… .
kqw

19
Я відповів на це запитання тут . Прочитайте і цей підручник " Як встановити Postgres для Ubuntu Linux ".
ruzenhack

@Ruzenhack, що посилання на підручник було саме те, що мені потрібно! Дуже ясно і просто
dwanderson

4
psql -h localhost -U postgres
Metin Atalay

Якщо ви отримаєте помилку role doesn't existІ помилку, can't create role, it already existsперегляньте цю відповідь: stackoverflow.com/a/56658832/1689770
Джонатан

Відповіді:


773

Використовуйте користувача операційної системи postgres для створення вашої бази даних, доки ви не встановили роль бази даних з необхідними привілеями, що відповідає однойменному користувачеві вашої операційної системи ( h9uestу вашому випадку):

sudo -u postgres -i

Як рекомендовано тут або тут .

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

Або виконайте одиночну команду, createuserяк postgresз sudo, як це демонструє дрейс в іншій відповіді.

Сенс полягає в тому, щоб використовувати користувача операційної системи, що відповідає одній імені з базою даних, щоб отримати доступ через identаутентифікацію . postgresє користувачем операційної системи за замовчуванням для ініціалізації кластера баз даних. Посібник:

Для завантаження системи бази даних, щойно ініціалізована система завжди містить одну заздалегідь задану роль. Ця роль завжди є «суперпользователем», і за замовчуванням (якщо не буде змінено під час запуску initdb) вона матиме те саме ім’я, що і користувач операційної системи, який ініціалізував кластер бази даних. Зазвичай ця роль буде названа postgres. Для того, щоб створити більше ролей, спочатку потрібно з’єднатись як цю початкову роль.

Я чув про незвичайні установки з нестандартними іменами користувачів або там, де користувач операційної системи не існує. Вам потрібно буде там адаптувати свою стратегію.

Про ролі бази даних та автентифікацію клієнта читайте в посібнику.


1
Неможливо запустити sudo etcяк postgres користувача ... Як встановити програму? Дивіться цю проблему встановлення S2geometry .
Пітер Краусс

Залежно від конфігурації, може просто знадобитися su postgres.
Fabien Snauwaert

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 до вищевказаної команди. Це створить вашого нового користувача як суперпользователя. Будь ласка, пам’ятайте про наслідки для безпеки, якщо ви вирішите це зробити.
sarink

1
Я отримую "недостатньо привілеїв", але тепер я отримую ПОМИЛКУ: roll "ім'я користувача" вже існує.
Вілліям Джадд

4
@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 з привілеєм як "суперпользователь"

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
# ВЕЛИКИЙ КОРИНИ для мене; ПОМИЛКА: роль "корінь" не існує
шейкер

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" СТВОРИТИ ПОТРІБНИК ПОТРІБНИКА З SUPERUSER PASSWORD 'postgresondocker'; " && \ createdb -O postgresondocker postgresondocker`` Чи можу я використовувати корінь для цього, якщо додам його до pg_ident?
Шивангі Сінгх

85

Встановлення postgres за допомогою apt-getне створює ролі користувача чи бази даних.

Щоб створити роль суперпользователя та базу даних для особистого облікового запису користувача:

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


1
Мені потрібно було запустити другу частину так:sudo -u postgres createdb $(whoami)
СанД

2
@SanD Якщо ви створили власний обліковий запис користувача як супер користувач (через -sпрапор у першій команді), ви можете створити базу даних як власну. Вам не потрібно буде працювати createdbяк postgres.
Майлз Еріксон

2
Чудова відповідь! Врятували мені години налагодження !!
Аміну Кано

79

Це працює для мене:

psql -h localhost -U postgres

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

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метод доцільний лише у повністю захищеному середовищі. Хоча доступ з ненадійних з'єднань можливий, ніколи не піддавайте свій кластер DB таким чином.
Ервін

це добре
horoyoi o

Перевірте: Якщо служба postgresql не запущена, можливо, у файлі може виникнути помилкаpg_hba.conf
Пройдіть


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) у вас.
Meadowlark Bradsher

Дякую тобі! Я боровся, як створити резервну копію postgresql з root, оскільки я не знаю пароль postgres
Діка

7

Введіть у місцевому запиті користувача, а не кореневому запиті користувача

sudo -u postgres createuser <local username>

Потім введіть пароль для місцевого користувача.

Потім введіть попередню команду, яка створила "роль 'ім'я користувача" не існує. "

Наведені вище кроки вирішили проблему для мене. Якщо ні, будь ласка, надішліть термінальні повідомлення для описаних вище кроків.



3

Створення кластеру БД вручну вирішило це в моєму випадку.

Чомусь, коли я встановив постгреси, "початковий БД" не був створений. Виконання initdbзробило для мене трюк.

Це рішення надано у Вікі PostgreSQL - Перші кроки :

initdb

Зазвичай встановлення постгресів у вашій ОС створює "початкову БД" і запускає демон сервера Postgres. Якщо ні, то вам потрібно запустити initdb


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.