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!


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.


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.


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


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


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.


2
To najbardziej pouczająca odpowiedź.
MyWrathAcademia


16

Musiałem rozbroić $PGUSER:

$ unset PGUSER
$ createuser -s postgres

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 .


8

Uruchomienie tego w wierszu poleceń powinno to naprawić

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


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ń.


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

2

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

createuser -s -U $USER

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.


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.


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.


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ż.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.