Błąd PostgreSQL: krytyczny: rola „nazwa użytkownika” nie istnieje

731

Konfiguruję mój PostgreSQL 9.1. Nic nie mogę zrobić z PostgreSQL: nie createdbmogę, nie mogę createuser; wszystkie operacje zwracają komunikat o błędzie

Fatal: role h9uest does not exist

h9uestto nazwa mojego konta, a ja sudo apt-get installPostgreSQL 9.1 na tym koncie.
Podobny błąd utrzymuje się na rootkoncie.

h9uest
źródło
1
Następnie możesz się na to natknąćFATAL: role "user" is not permitted to log in , sprawdź dba.stackexchange.com/questions/57723/ ...
kqw
19
Odpowiedziałem na to pytanie tutaj . Przeczytaj także samouczek „ Jak zainstalować Postgres dla Ubuntu Linux ”.
ruzenhack
@Ruzenhack ten link do samouczka był dokładnie tym, czego potrzebowałem! Bardzo jasne i proste
dwanderson
4
psql -h localhost -U postgres
Metin Atalay
Jeśli pojawi się błąd role doesn't existORAZ błąd, can't create role, it already existssprawdź tę odpowiedź: stackoverflow.com/a/56658832/1689770
Jonathan

Odpowiedzi:

773

Użyj użytkownika systemu operacyjnego, postgres aby utworzyć bazę danych - o ile nie skonfigurowano roli bazy danych z niezbędnymi uprawnieniami, które odpowiadają użytkownikowi systemu operacyjnego o tej samej nazwie ( h9uestw Twoim przypadku):

sudo -u postgres -i

Zgodnie z zaleceniami tutaj lub tutaj .

Następnie spróbuj ponownie. Wpisz exitpo zakończeniu pracy jako użytkownik systemu postgres.

Lub wykonaj jedno polecenie createusertak jak w postgresprzypadku sudo, jak pokazano w drees w innej odpowiedzi.

Chodzi o to, aby użyć użytkownika systemu operacyjnego pasującego do roli bazy danych o tej samej nazwie, aby uzyskać dostęp poprzez identuwierzytelnianie . postgresjest domyślnym użytkownikiem systemu operacyjnego, który zainicjował klaster bazy danych. Instrukcja:

Aby uruchomić system bazy danych, świeżo zainicjowany system zawsze ma jedną predefiniowaną rolę. Ta rola jest zawsze „superużytkownikiem” i domyślnie (o ile nie zostanie zmieniona podczas działania initdb) będzie miała taką samą nazwę jak użytkownik systemu operacyjnego, który zainicjował klaster bazy danych. Zwyczajowo ta rola zostanie nazwana postgres. Aby utworzyć więcej ról, musisz najpierw połączyć się jako rola początkowa.

Słyszałem o nieparzystych konfiguracjach z niestandardowymi nazwami użytkowników lub w których użytkownik systemu operacyjnego nie istnieje. Musisz tam dostosować swoją strategię.

Przeczytaj o rolach bazy danych i uwierzytelnianiu klienta w instrukcji.

Erwin Brandstetter
źródło
1
Nie można uruchomić sudo etcjako użytkownik postgres ... Jak zainstalować program? Zobacz ten problem z instalacją S2geometry .
Peter Krauss
W zależności od konfiguracji może być po prostu potrzebny su postgres.
Fabien Snauwaert
1
sudo -u postgresnie działa, a sudo -u postgres -idziała! Co robi -iflaga?
parsecer
1
@parsecer: Uruchamia się interaktywna powłoka, podobna su, ale oparta na uprawnieniach sudo. Zobaczyć man sudo.
Erwin Brandstetter,
284

Po wypróbowaniu rozwiązań wielu ludzi i bez powodzenia, ta odpowiedź w końcu mi pomogła.

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

Krótko mówiąc, bieganie

sudo -u postgres createuser owning_user

tworzy rolę o nazwie właściciel_użytkownika (w tym przypadku h9uest). Następnie możesz uruchomić rake db:createz terminala pod dowolną skonfigurowaną nazwą konta bez konieczności wchodzenia do środowiska Postgres.

Drees
źródło
29
Jeśli pojawi się błąd „niewystarczających uprawnień”, możesz dołączyć flagę -s do powyższego polecenia. Spowoduje to utworzenie nowego użytkownika jako administratora. Należy pamiętać o konsekwencjach dla bezpieczeństwa, jeśli zdecydujesz się to zrobić.
sarink,
1
Dostaję „niewystarczające uprawnienia”, ale teraz dostaję BŁĄD: roll „nazwa użytkownika” już istnieje.
Wylliam Judd
4
@ConnorLeech Możesz zastąpić słowo „postgres” nazwą swojego superużytkownika PG. W moim przypadku było to moje imię.
myfashionhub
1
Też musiałem użyć -si nie musiałem używać sudo -u postgres(po prostu createuser new_userdziałało dobrze)
Meekohi
2
psql: FATAL: role "jonny" does not existok, więc sudo -u postgres -s createuser jonnydlaczego createuser: creation of new role failed: ERROR: role "jonny" already exists
Jonathan
134
sudo su - postgres

psql template1

tworzenie roli na pgsql z uprawnieniami jako „superuser”

CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;

Następnie utwórz użytkownika

CREATE USER username; 
eg. CREATE USER demo;

Przypisywanie uprawnień użytkownikowi

GRANT ROOT TO username;

A następnie włącz logowanie tego użytkownika, abyś mógł uruchomić np .: psql template1z normalnego $terminala:

ALTER ROLE username WITH LOGIN;
Mohammed Saleem
źródło
4
Właśnie zrobiłem nową instalację PostgreSQL 9.4.4 i mogłem użyć następującego polecenia, aby utworzyć nowy superużytkownik: CREATE ROLE username superuser createdb login; który łączy wszystkie trzy kroki ...
iPad Guy
25
# GRANT ROOT dla mnie; BŁĄD: rola „root” nie istnieje
shacker
6
prostsza wersja: sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Zach Estela,
2
@shacker#GRANT postgres TO username
7kemZmani
Używam roota, aby uruchomić serwer, a następnie `` psql -U postgres -h 127.0.0.1 - komenda „UTWÓRZ UŻYTKOWNIKA postgresondocker Z HASŁEM SUPERUSER„ postgresondocker ”;” && \ Createdb -O postgresondocker postgresondocker`` czy mogę użyć roota, aby to zrobić, jeśli dodam go do pg_ident?
Shivangi Singh
85

Instalowanie postgres przy użyciu apt-getnie tworzy roli użytkownika ani bazy danych.

Aby utworzyć rolę administratora i bazę danych dla osobistego konta użytkownika:

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

Miles Erickson
źródło
1
Musiałem uruchomić drugą część jako:sudo -u postgres createdb $(whoami)
SanD
2
@ SanD Jeśli utworzyłeś własne konto użytkownika jako superużytkownik (poprzez -sflagę w pierwszym poleceniu), możesz utworzyć bazę danych jako Ty. Nie będziesz musiał biegać createdbjako postgres.
Miles Erickson,
2
Świetna odpowiedź! Zaoszczędziłem godziny debugowania !!
Aminu Kano,
79

To działa dla mnie:

psql -h localhost -U postgres
mateusz.szymborski
źródło
dodaj hasło dla powyższego użytkownika.
Chaudhry Waqas
1
@ Vincent, jeśli hasło nigdy nie zostało zmienione po instalacji PostgreSQL, domyślnie jest postgres(testowane w systemie Linux i Windows).
silvioprog,
1
role postgres does not exist
Jacob Schneider
15

Metoda pracy,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer tutaj zmień peera na zaufanie
  3. uruchom ponownie, sudo service postgresql restart

  4. Spróbuj teraz, psql -U postgres

Mohideen bin Mohammed
źródło
1
Powinno być oczywiste, że trustmetoda jest wskazana tylko w całkowicie bezpiecznym środowisku. Chociaż możliwy jest dostęp z niezaufanych połączeń, nigdy nie narażaj klastra DB w ten sposób.
Erwin Brandstetter,
ten jest dobry
horoyoi o
Sprawdź: Jeśli usługa postgresql nie została uruchomiona, być może w pliku może wystąpić błądpg_hba.conf
Walk
11

W przypadku wersji Postgres 9.5 użyj następującego polecenia:

psql -h localhost -U postgres

Mam nadzieję, że to pomoże.

Kalyan Halder Raaz
źródło
11
psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;
Abel
źródło
4
psql postgreswyniki:psql: FATAL: role "root" does not exist
TomSawyer
2
psql postgres -U postgres? Zależy od posiadanego użytkownika (-U).
Meadowlark Bradsher
Dziękuję Ci! Walczyłem, jak wykonać kopię zapasową postgresql z rootem, ponieważ nie znam hasła postgres
Dika
7

W wierszu polecenia użytkownika lokalnego, a nie użytkownika root, wpisz

sudo -u postgres createuser <local username>

Następnie wprowadź hasło użytkownika lokalnego.

Następnie wprowadź poprzednie polecenie, które wygenerowało „rola„ nazwa użytkownika ”nie istnieje”.

Powyższe kroki rozwiązały dla mnie problem. Jeśli nie, wyślij wiadomości terminalu dla powyższych kroków.

Robert Cambil
źródło
3

Ręczne utworzenie klastra DB rozwiązało go w moim przypadku.

Z jakiegoś powodu, kiedy zainstalowałem postgres, „początkowa baza danych” nie została utworzona. Wykonanie initdbpomogło mi.

To rozwiązanie jest dostępne na Wiki PostgreSQL - pierwsze kroki :

initdb

Zwykle instalacja postgres w systemie operacyjnym tworzy „początkową bazę danych” i uruchamia demona serwera postgres. Jeśli nie, musisz uruchomić initdb

Natacha
źródło
2

Dla użytkowników systemu Windows :psql -U postgres

Powinieneś zobaczyć interfejs wiersza poleceń do PostgreSQL: postgres=#

Andrij Tołstoj
źródło
0

Wykonaj następujące kroki, a to zadziała dla Ciebie:

  1. biegać msfconsole
  2. wpisz db_console
  3. niektóre informacje zostaną wyświetlone, wybierz informacje, które każą ci zrobić: db_connect user:pass@host:port.../databaseprzepraszam, nie pamiętam tego, ale to tak, a następnie zastąp użytkownika i hasło oraz hosta i bazę danych informacjami zawartymi w database.ymlmiejscu :/usr/share/metasploit-framework/config
  4. zobaczysz. odbudowanie pamięci podręcznej modelu w tle.
  5. Wpisz apt-get update && apt-get upgrade po aktualizacji zrestartuj terminal i msfconsole na lunch i działa, możesz to sprawdzić, wpisując msfconsole: msf>db_statuszobaczysz, że jest podłączony.
Loli Pronoms
źródło
0

zrzuć i przywróć z --no-owner --no-privilegesflagami

na przykład

zrzut - pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

przywrócić - pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

srghma
źródło