psql: FATAL: rola „postgres” nie istnieje

404

Jestem nowicjuszką postgres.

Zainstalowałem postgres.app dla Mac. Bawiłem się poleceniami psql i przypadkowo upuściłem bazę danych postgres. Nie wiem co w tym było.

Obecnie pracuję nad samouczkiem: http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

I utknąłem w sudo -u postgres psql postgres

KOMUNIKAT O BŁĘDZIE: psql: FATAL: role "postgres" does not exist

$ które psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

Z tego się drukuje psql -l

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

Jakie więc kroki powinienem podjąć? Usunąć wszystko związane z psql i ponownie zainstalować wszystko?

Dzięki za pomoc chłopaki!

użytkownik805981
źródło
1
Ponowne uruchamianie komputera. Zapewnia wykonanie Launchd z brew services start postresql.
Michael Dimmitt

Odpowiedzi:

410

UWAGA: Jeśli zainstalowałeś postgres za pomocą homebrew, zobacz komentarz od @ user3402754 poniżej.

Zauważ, że komunikat o błędzie NIE mówi o brakującej bazie danych, mówi o brakującej roli. Później podczas logowania może również natknąć się na brakującą bazę danych.

Ale pierwszym krokiem jest sprawdzenie brakującej roli: jaka jest wydajność psqlpolecenia \du? W moim systemie Ubuntu odpowiednia linia wygląda następująco:

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

Jeśli nie ma co najmniej jednej roli superuser, masz problem :-)

Jeśli istnieje, możesz użyć go do zalogowania się. I patrząc na wyjściu Twojego \lpolecenia: Uprawnienia dla userna template0i template1baz danych są takie same jak w moim systemie Ubuntu dla superużytkownika postgres. Myślę więc, że twoja prosta konfiguracja używa userjako superużytkownika. Aby wypróbować to polecenie, należy się zalogować:

sudo -u user psql user

Jeśli usernaprawdę jest superużytkownikiem DB, możesz utworzyć dla niego innego superużytkownika DB i prywatną, pustą bazę danych:

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

Ale ponieważ wydaje się, że twoja konfiguracja postgres.app tego nie robi, ty też nie powinieneś. Prosta adaptacja samouczka.

AH
źródło
10
Dla mnie użytkownik nie został utworzony - działało zamiast tego CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; używam postgres v10.
arcseldon
229
Jeśli zainstalowałeś Postgres homebrew, musisz uruchomić /usr/local/opt/postgres/bin/createuser -s postgresna swoim terminalu
użytkownik3402754
7
Musiałem uruchomić/usr/local/opt/postgresql/bin/createuser -s postgres
user1807782
1
@ user1807782 Uratowałeś mi dzień; Myślę, że powinieneś reklamować to jako odpowiedź.
tolga
1
Jeśli używasz określonej wersji postgresu, musisz dołączyć tę wersję do ścieżki -/usr/local/opt/postgresql@11/bin/createuser -s postgres
Digitrance
264

Kluczem jest „Zainstalowałem postgres.app dla systemu Mac”. Ta aplikacja konfiguruje lokalną instalację PostgreSQL z superużytkownikiem bazy danych, którego rola jest taka sama jak nazwa użytkownika (krótka).

Podczas pierwszego uruchomienia Postgres.app tworzy bazę danych $ USER, która jest domyślną bazą danych dla psql, gdy nie określono żadnej. Domyślnym użytkownikiem jest $ USER, bez hasła.

Niektóre skrypty (np. Kopia zapasowa bazy danych utworzona pgdumpna systemie Linux) i tutoriale zakładają, że superużytkownik ma tradycyjną nazwę roli postgres.

Możesz sprawić, by lokalna instalacja wyglądała nieco bardziej tradycyjnie i uniknęła tych problemów, wykonując jeden raz:

/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres

co sprawi, że te FATAL: rola „postgres” nie istnieje, zniknie.

jwd630
źródło
119
Jeśli używasz postgres z Homebrew, to chcesz /usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres(oczywiście dla wersji 9.2.4).
Roger Lipscombe
1
Wydaje się, że w przypadku postgres.app 9.3 zmieniono katalogi. Próbowałem: /Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres, ale wygenerował ten sam komunikat o błędzie: „createuser: nie można połączyć się z bazą danych postgres: FATAL: rola„ postgres ”nie istnieje „
Michael Coxon,
7
/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgresdziałał dla mnie poprawnie.
cjspurgeon
9
@RogerLipscombe, jeśli uruchomisz brew link postgresqlpo instalacji, nie musisz dołączać całej ścieżki createuser, prosty createuser -s postgreszadziała świetnie
AlessioX
2
createuser -s postgrespracował dla mnie. Zainstalowałem postgres z Homebrew
biniam
227

Dla Maca:

  1. Zainstaluj Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgreslub /usr/local/opt/postgres/bin/createuser -s postgresktóry po prostu użyje najnowszej wersji.
  5. uruchom serwer Postgres ręcznie: pg_ctl -D /usr/local/var/postgres start

Aby uruchomić serwer przy uruchomieniu

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

Teraz jest skonfigurowany, zaloguj się psql -U postgres -h localhostlub użyj PgAdmin dla GUI.

Domyślnie użytkownik postgresnie będzie miał hasła logowania.

Sprawdź tę stronę, aby znaleźć więcej takich artykułów: https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7

Nitin
źródło
3
Dzięki najnowszej instalacji naparu możesz zrobić, brew services start postgresqlaby uruchomić postgres
Automatico
<3 <3 <3 <3 <3 <3
Adeel Ahmad
to najlepsza odpowiedź
Alejandro Pablo Tkachuk
39
createuser postgres --interactive

lub postgresl superużytkownika

createuser postgres -s
Substancja MX
źródło
Uznałem tę odpowiedź za przydatną, gdy mój pgadmin wciąż pytał o użytkownika postgres i nie mam roli postgres na początku, to polecenie ją utworzyło, dodałem autogenerowane pw do mojego pgadmin i problem rozwiązany!
niezwykły
Działa to dla mnie .. ale w ten sposób: „utwórz postgres użytkownika”
Roberto Rodriguez
31

Dzieje się tak, gdy uruchamiasz initdbużytkownika, którego ID nie jest postgres, bez podawania postgresnazwy użytkownika za pomocą --username=postgreslub -U postgres.

Klaster bazy danych jest następnie tworzony przy użyciu konta użytkownika systemu, którego użyto do uruchomienia initdb, i otrzymuje uprawnienia administratora.

Aby to naprawić, po prostu utwórz nowego użytkownika o nazwie postgresz opcją --superuserza pomocą createusernarzędzia dostarczonego z Postgres. Narzędzie można znaleźć w katalogu Postgres bin. na przykład

createuser --superuser postgres

Jeśli masz niestandardową nazwę hosta lub port, ustaw odpowiednie opcje .

Nie zapomnij usunąć drugiego konta użytkownika, które zostało utworzone dla Ciebie przez initdb.

isapir
źródło
2
To najbardziej pouczająca odpowiedź.
MyWrathAcademia
17

Dla mnie ten kod działał:

/Applications/Postgres.app/Contents/Versions/9.4/bin/createuser -s postgres

pochodzi stąd: http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4

Kevin Zhao
źródło
Dla mnie też działa! Uratowałeś mi bekon.
Dave Munger,
1
Dostaję rolę „ja” nie istnieje
SuperUberDuper
Czy to znaczy, że ten nowy użytkownik posgres nie będzie miał hasła?
olaoluwa_98
16

Musiałem rozbroić $PGUSER:

$ unset PGUSER
$ createuser -s postgres
Beau Barker
źródło
1
och, w końcu zrozumiałem, o co chodzi. Okazuje się, że próbujesz utworzyć postgres użytkownika jako postgres użytkownika
Taras Matsyk
14

Najpierw musisz utworzyć użytkownika:

sudo -u postgres createuser --superuser $USER

Po utworzeniu bazy danych:

sudo -u postgres createdb $USER

Zmień $USER nazwę użytkownika systemu.

Kompletne rozwiązanie można zobaczyć tutaj .

ruzenhack
źródło
8

Uruchomienie tego w wierszu poleceń powinno to naprawić

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>

Alex Levine
źródło
1
To jedyna rzecz, która działała dla mnie. Dziękuję Ci!
Herb Meehan
4

Usunięcie postgresbazy danych nie ma tak naprawdę znaczenia. Ta baza danych jest początkowo pusta, a jej celem jest po prostu, aby postgresużytkownik miał rodzaj „domu”, z którym mógłby się połączyć, gdyby był potrzebny.

Nadal możesz go odtworzyć za pomocą polecenia SQL CREATE DATABASE postgres;

Pamiętaj, że samouczek wymieniony w pytaniu nie został napisany z postgres.appmyślą o nim. W przeciwieństwie do PostgreSQL dla Unixa, postgres.apppróbuje wyglądać jak normalna aplikacja, w przeciwieństwie do usługi, która byłaby uruchomiona przez dedykowanego postgresużytkownika mającego inne uprawnienia niż zwykły użytkownik. postgres.appjest prowadzony i zarządzany przez twoje własne konto.

Więc zamiast tego polecenia: sudo -u postgres psql -U postgresw duchu postgres.app wystarczy po prostu wydać:, psqlktóry automatycznie łączy się z bazą danych pasującą do nazwy użytkownika i kontem db o tej samej nazwie, które akurat jest superużytkownikiem, więc może zrobić wszystko pod względem uprawnień.

Daniel Vérité
źródło
W porządku. Ale dlaczego ERROR: cannot drop the currently open databasepojawia się błąd, gdy próbuję usunąć bazę danych użytkownika? Więc czy nie jest dobrą praktyką korzystanie z tego postgres.app?
user805981,
Nie można upuścić bazy danych podczas połączenia z nią. dlaczego w ogóle chcesz go usunąć? Jest tu dla twojej wygody.
Daniel Vérité
Chciałem tylko zobaczyć, czy mogę. Więc to jest jak domyślna baza danych poprawna, kiedy uruchamiam mój psql i postgres.app? A co z uprawnieniami dostępu? Nie mogę ich już ustawić? Widzę, że
szablon0 i szablon1
@ user805981 Postgres.appsłuży do celów testowych i programistycznych; jest to pakiet PostgreSQL od Heroku, zaprojektowany, aby ułatwić użytkownikom komputerów Mac rozwijających się z Ruby on Rails, aby testować z PostgreSQL zamiast domyślnego SQLite. Zastosowania Railsów miały tendencję do testowania SQLite i wdrażania na PostgreSQL, co powodowało różnego rodzaju problemy, więc Heroku starało się ułatwić testowanie również na PostgreSQL. Postgres.appnadaje się do testowania, ale nie zastanawiałbym się nad użyciem go do danych produkcyjnych lub rzeczywistych, po prostu nie do tego służy.
Craig Ringer
4

Jeśli chodzi o to, co jest warte, mam zainstalowane Ubuntu i wiele pakietów, co spowodowało konflikt.

Dla mnie właściwą odpowiedzią było:

sudo -i -u postgres-xc
psql
gra oprogramowania
źródło
2

To jedyny, który to naprawił dla mnie:

createuser -s -U $USER
Bax
źródło
2
Dzięki temu bieżący użytkownik jest superużytkownikiem systemu, a nie tylko administratorem postgres. Powiedziałbym, że byłby to ogólnie zły pomysł, ponieważ obchodzi zwykłe zasady bezpieczeństwa. Użytkownik powinien sudouzyskać tymczasowe uprawnienia administratora.
Sean Dawson
1

W systemie Ubuntu oczyściłem PostgreSQL i ponownie go zainstalowałem. Wszystkie bazy danych zostaną przywrócone. To rozwiązało problem dla mnie.

Rada - weź kopię zapasową baz danych, aby być bezpieczniejszym.

Gaurav Neema
źródło
0

Nie sądzę, że sudo jest tutaj potrzebne, ponieważ psql -l zwraca listę baz danych. Mówi mi to, że initdb był uruchamiany przez bieżącego użytkownika, a nie przez użytkownika postgres.

Możesz po prostu:

psql

I kontynuuj samouczek.

Sugerowałbym ogólne punkty AH dotyczące tworzenia postgres użytkownika i bazy danych, ponieważ wiele aplikacji może oczekiwać, że tak będzie.

Krótkie wyjaśnienie:

PostgreSQL nie będzie działał z dostępem administracyjnym do systemu operacyjnego. Zamiast tego działa ze zwykłym użytkownikiem, a w celu obsługi uwierzytelnienia równorzędnego (pytając system operacyjny, który próbuje się połączyć) tworzy użytkownika i db z użytkownikiem uruchamiającym proces inicjalizacji. W tym przypadku był to zwykły użytkownik.

Chris Travers
źródło
usuwa kilka ważnych różnic w postgresie. Dziękuję Ci.
imsrgadich
0

Utknąłem w tej sprawie, wykonując brew services stop postgresqldzień wcześniej.
Następnego dnia: brew services start postgresqlnie zadziała. Wynika to z faktu, jak pokazano podczas instalacji za pomocą Homebrew. postgresql używa wersji uruchomionej ..., która ładuje się, gdy komputer jest włączony.

rozkład:
brew services start postgresql
Uruchom ponownie komputer.

Michael Dimmitt
źródło
0

\duPowrót polecenie:

Nazwa roli = postgres@implicit_files

I ten postgres=# \password postgresbłąd zwraca polecenie :

BŁĄD: rola „postgres” nie istnieje.

Ale to postgres=# \password postgres@implicit_files działa dobrze.

Również po sudo -u postgres createuser -s postgrespierwszym wariancie działają również.

Michał
źródło