Użytkownik Postgres nie istnieje?

92

Właśnie zainstalowałem Postgres i majstrowałem przy nim i różnymi konfiguracjami przez 1-2 godziny.

Utknąłem na niemożności zmiany użytkownika na postgres

$ su - postgres zwraca następujący błąd: su: unknown login: postgres

$ sudo -u postgres psql zwraca następujący błąd: sudo: unknown user: postgres

Te próby są podejmowane jako zwykły użytkownik. Wypróbowanie ich jako roota daje dokładnie takie same wyniki. Zainstalowałem postgres przez Homebrew na OS X i wielokrotnie czytałem instrukcje.

krystah
źródło
Czy po prostu próbujesz uruchomić psql?
danielM
Cóż, tak, chcę działać jako właściwy postgresużytkownik.
krystah
W przypadku niektórych smaków Mac OS X, z pewnymi metodami instalacji, myślę, że postgres_zamiast tego użytkownik jest tworzony jako . Uwaga na końcu podkreślenia. Czy na pewno Ty (lub instalator) faktycznie utworzyłeś instancję PostgreSQL i uruchomiłeś bazę danych?
Craig Ringer
1
Nie mogłem przełączyć się na postgresużytkownika. Rozwiązano problem po zainstalowaniu postgresql-serverpakietu.
sergio 郝海东 冠状 病 六四 事件 法轮功

Odpowiedzi:

89

psql: Loguje mnie przy użyciu mojej domyślnej nazwy użytkownika

psql -U postgres: Loguje mnie jako użytkownik postgres

Sudo nie wydaje mi się potrzebne.

Używam Postgres.app dla mojej bazy danych postgres OS X. Usunęło to ból głowy związany z upewnianiem się, że instalacja działa, a serwer bazy danych został poprawnie uruchomiony. Sprawdź to tutaj: http://postgresapp.com

Edycja: Podziękowania dla @Erwin Brandstetter za poprawienie mojego użycia argumentów.

danielM
źródło
8
Zainstalowałem za pomocą Brew i nie utworzył użytkownika o nazwie postgres lub _postgres (o ile widzę), więc to się nie udało. @kangkyu solution wyjaśnia i prowadzi przez problemy - zakładając, że nie masz wtedy użytkownika postgres: psql postgresi psql -d postgres.
notapatch
21

By psql --help, kiedy nie ustawić opcje dla nazwy bazy danych (bez -dopcji) byłoby to nazwa użytkownika, jeśli nie zrobił -U, nazwa użytkownika bazy danych byłoby zbyt swoją nazwę użytkownika, itd.

Ale przez initdb(aby utworzyć pierwszą bazę danych) polecenie, nie ma twojej nazwy użytkownika jak żadna nazwa bazy danych. Posiada bazę danych o nazwie postgres. Pierwsza baza danych jest zawsze tworzona przez komendę initdb podczas inicjowania obszaru przechowywania danych. Ta baza danych nazywa się postgres.

Więc jeśli nie masz innej bazy danych o nazwie twoja nazwa użytkownika, musisz zrobić, psql -d postgresaby polecenie psql działało. I wygląda na to, że -ddomyślnie daje opcję, psql postgresrównież działa.

Jeśli utworzyłeś inną bazę danych o takiej samej nazwie jak twoja nazwa użytkownika (należy to zrobić createdb), możesz psqltylko wydawać komendy . Wygląda na to, że pierwsza nazwa użytkownika bazy danych została ustawiona jako nazwa użytkownika maszyny przez brew.

psql -d <first database name> -U <first database user name>

lub,

psql -d postgres -U <your machine username>
psql -d postgres

działałby domyślnie.

kangkyu
źródło
17

OS X ma tendencję do poprzedzania nazw kont systemowych znakiem „_”; nie mówisz, jakiej wersji OS X używasz, ale przynajmniej w 10.8 i 10.9 użytkownik _postgres istnieje w domyślnej instalacji. Zauważ, że nie będziesz w stanie uzyskać dostępu do sutego konta (z wyjątkiem konta root), ponieważ nie ma ono hasła. sudo -u _postgresz drugiej strony powinien działać dobrze.

Gordon Davisson
źródło
Dzięki! To jest odpowiedź, której szukałem. Czy jest coś, co mogę zrobić, aby zmienić nazwę użytkownika na „postgres”? Zalogowanie się jako użytkownik _postgres prowadzi do psql narzekającego, że użytkownik "_postgres" nie istnieje. Próbuję przywrócić czystą instancję postgres z plikiem kopii zapasowej z innej bazy danych
Chris Reyes - he-him
1
@ChrisReyes Zmiana nazwy kont systemowych może uszkodzić komponenty systemu, które z nich korzystają, więc zdecydowanie odradzam to. Mógłbyś utworzyć inne konto użytkownika o nazwie „postgres” i użyć tego, ale jeśli dobrze rozumiem (a może nie), to, na co natrafisz, to fakt, że konto użytkownika w bazie danych postgres nie nosi nazwy _postgres. AIUI nazwy kont w DB są oddzielne od nazw kont systemowych, więc nie powinno być problemu z uruchomieniem instancji DB na koncie systemowym "_postgres" i otwarciem tego DB za pomocą konta bazy danych "postgres".
Gordon Davisson,
4
psql -U postgres

Dla mnie zadziałało dobrze w przypadku nazwy db: postgres i nazwa użytkownika: postgres. Nie musisz więc pisać sudo.

A w przypadku innej bazy danych możesz spróbować

psql -U yourdb postgres

Jak podano w pomocy Postgres:

psql [OPTION]... [DBNAME [USERNAME]]
malina moroszka
źródło
Mój przypadek: $ psql -U postgresgeneruje dane wyjściowe psql: FATAL: role "postgres" does not exist, ale psql postgresdziała.
Frozen Flame
4

Otrzymuję dokładnie te same błędy co kryshah z su - postgresi sudo -u postgres psql. Odpowiedź DanielM zawiera również błędy.

Wyprowadza przy złych ustawieniach

Odpowiedz jednak z komentarza przbabu.

masi$ psql
psql: FATAL:  database "masi" does not exist
masi$ psql -U postgres
psql: FATAL:  role "postgres" does not exist
masi$ psql postgres
psql (9.4.1)
Type "help" for help.

Myślę, że jakaś część tego problemu może być związana z ustawieniami właściciela w OSX

masi$ ls -al /Users/
total 0
drwxr-xr-x   7 root      admin  238 Jul  3 09:50 .
drwxr-xr-x  37 root      wheel 1326 Jul  2 19:02 ..
-rw-r--r--   1 root      wheel    0 Sep 10  2014 .localized
drwxrwxrwt   7 root      wheel  238 Apr  9 19:49 Shared
drwxr-xr-x   2 root      admin   68 Jul  3 09:50 postgres
drwxr-xr-x+ 71 masi      staff 2414 Jul  3 09:50 masi

ale robienie sudo chown -R postgres:staff /Users/postgresdaje chown: invalid user: ‘postgres:staff’.

Krótko mówiąc, to nie jest rozwiązanie problemu. Użyj narzędzi dostarczonych przez instalację postgres, aby utworzyć użytkownika i bazę danych.

Aby uzyskać właściwe ustawienia i wyjścia

Po instalacji postgres dostępne są specjalne polecenia umożliwiające dodanie nowego użytkownika do systemu bazy danych. Po initdb uruchom następujące czynności, jak opisano tutaj

createuser --pwprompt postgres
createdb -Opostgres -Eutf8 masi_development
psql -U postgres -W masi_development

Aby przez cały czas unikać prośby o hasło, masz trzy możliwości, jak opisano tutaj .

Léo Léopold Hertz 준영
źródło
2

Dla mnie to było rozwiązanie w systemie MacOS Ponowna instalacja pliku psql

brew install postgres

Uruchom serwer PostgreSQL

pg_ctl -D /usr/local/var/postgres start

Zainicjuj bazę danych

initdb /usr/local/var/postgres

Jeśli ta komenda zgłasza błąd, rm stary plik bazy danych i ponownie uruchom powyższe polecenie

rm -r /usr/local/var/postgres

Utwórz nową bazę danych

createdb postgres_test
psql -W postegres_test

Zostaniesz zalogowany do tej bazy danych i możesz tutaj utworzyć użytkownika, aby się zalogować

Adnan Fayaz
źródło
0

Rozwiązanie jest proste:
zaloguj się jako root
i po:

su - postgres

psql
el fuser
źródło