psql: FATAL: baza danych „<użytkownik>” nie istnieje


721

Korzystam z aplikacji PostgreSql dla systemu Mac ( http://postgresapp.com/ ). Używałem go w przeszłości na innych komputerach, ale sprawia mi to problemy podczas instalacji na moim MacBooku. Zainstalowałem aplikację i uruchomiłem:

psql -h localhost

Zwraca:

psql: FATAL:  database "<user>" does not exist

Wygląda na to, że nie mogę nawet uruchomić konsoli, aby utworzyć bazę danych, którą próbuje znaleźć. To samo dzieje się, gdy po prostu biegam:

psql 

lub jeśli uruchomię psql z menu rozwijanego aplikacji:

Statystyki maszyny:

  • OSX 10.8.4

  • psql (PostgreSQL) 9.2.4

Każda pomoc jest mile widziana.

Próbowałem również zainstalować PostgreSql przez homebrew i otrzymuję ten sam problem. Przeczytałem również stronę dokumentacji aplikacji, która stwierdza:

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.

Wygląda na to, że aplikacja nie tworzy $ USER, jednak zainstalowałem -> odinstalowałem - ponownie zainstalowałem kilka razy, więc musi to być coś z moją maszyną.

Znalazłem odpowiedź, ale nie jestem pewien, jak dokładnie działa, ponieważ użytkownik, który odpowiedział w tym wątku -> Pierwsze uruchomienie Postgresql na Macu: Baza danych „postgres” nie istnieje, nie kontynuowała. Użyłem następującego polecenia, aby otworzyć psql:

psql -d template1

Pozostawię tę odpowiedź bez odpowiedzi, dopóki ktoś nie wyjaśni wyjaśnienia, dlaczego to działa.


3
Co psql -d postgres -U postgres -h localhostpokazuje Bez flag domyślnie jest to użytkownik CLI i powiedziałbym, że domyślnie jest to administrator bazy danych „postgres”, ale nie mam Maca do testowania.
bma

@bma To daje mi psql: Fatal: rola „postgres” nie istnieje, która pierwotnie doprowadziła mnie tutaj -> stackoverflow.com/questions/15301826/... . Próbowałem użyć tej odpowiedzi, ale otrzymuję ten sam wynik -> psql: FATAL: „użytkownik” bazy danych nie istnieje
Ryan Rich

Czy przejrzałeś dziennik db? Zastanawiam się, czy byłyby tam emitowane więcej szczegółów.
bma

12
Miałem ten sam problem. Po prostu createdb <user>działało dla mnie.
poshaughnessy

uruchom komendę as psql -U user -d postgres, aby upewnić się, że użytkownik jest połączony z bazą danych postgres, która jest już obecna. Musimy więc przekazać bazę danych również podczas logowania.
Anil

Odpowiedzi:


1172

Wygląda na to, że menedżer pakietów nie utworzył dla Ciebie bazy danych o nazwie $ user. Powodem tego

psql -d template1

dla ciebie działa to, że template1 to baza danych tworzona przez sam postgres i jest obecna we wszystkich instalacjach. Najwyraźniej jesteś w stanie zalogować się do template1, więc musisz mieć prawa przypisane do ciebie przez bazę danych. Spróbuj tego w wierszu poleceń:

createdb

a następnie sprawdź, czy możesz zalogować się ponownie za pomocą

psql -h localhost

Spowoduje to po prostu utworzenie bazy danych dla użytkownika logowania, który moim zdaniem jest tym, czego szukasz. Jeśli utworzony błąd nie powiedzie się, nie masz wystarczających uprawnień do stworzenia własnej bazy danych i będziesz musiał wymyślić, jak naprawić pakiet homebrew.


38
W moim przypadku napisałem, $ createdb -h localhostaby rozwiązać błąd could not connect to database postgres: could not connect to server. Następnie mogę połączyć się z konsolą postgresql za pośrednictwem psql -h localhost.
ExiRe

Nadal pojawia się monit o hasło i nie mam pojęcia, które to hasło, które jest domyślnym hasłem do aplikacji Postgres?
LasagnaAndroid

2
Dzięki @Kirk. Czy naprawdę potrzebujemy -d template1twojego pierwszego polecenia? Widziałem „template1” w samouczkach w całym Internecie, ale tylko on mnie myli. Moim zdaniem bardziej logicznym rozwiązaniem byłoby 1) Utwórz użytkownika PostgreSQL, np. „Usera” 2) Utwórz bazę danych o tej samej nazwie co użytkownik „usera” (myślę, że to szalone, ale wygląda na to, że PostgreSQL tego wymaga) 3) Zaloguj się do PostgreSQL jako superużytkownik „postgres” i przypisz uprawnienia do bazy danych „usera” użytkownikowi „usera” (o mój Boże, czy to naprawdę prawdziwe życie?)
ericn

@eric: -d szablon1 służy tylko do sprawdzenia, czy OP może się w ogóle zalogować. Ponieważ jest on tworzony w czasie initdb, zawsze istnieje i był łatwy do sprawdzenia. Od tego momentu twoja procedura jest zasadniczo „prawdziwym życiem”.
Kirk Roybal

@ExiRe Właśnie wyleczyłeś ogromny ból głowy, który miałem z jednym prostym poleceniem. Dzięki!
Dave Munger,

193

Z terminala wystarczy uruchomić polecenie w oknie wiersza polecenia. (Nie w psql) .

createdb <user>

A następnie spróbuj ponownie uruchomić postgres.


3
Piękny! Zrobiło to! Po uruchomieniu tego wszystkie polecenia psql działają jak urok! dzięki tona!
wtedyaturalista

1
Próbowałem w szablonie psql. cholera
użytkownik1735921,

2
też możesz po prostu uruchomićcreatedb
Mantisimo,

wskazówka dla użytkowników takich jak ja;) (Nie w psql). oznacza, że ​​po prostu otwórz okno terminala, po prostu wpisz to utworzoneb jako pierwsze polecenie, a następnie spróbuj zalogować się w psql.
Rohan Dodeja

Świetny! Pracował dla mnie na OSX.
darkhipo

150

Domyślnie postgres próbuje połączyć się z bazą danych o tej samej nazwie co użytkownik. Aby temu zapobiec, po prostu określ użytkownika i bazę danych:

psql -U Username DatabaseName 

14
Dzięki, czy znasz przyczynę takiego projektu - dlaczego na świecie miałbym domyślnie korzystać z bazy danych z nazwiskami?
ericn

3
Bazy danych @eric są często używane przez usługi działające jako dedykowany użytkownik. Myślę więc, że strategia używania nazwy użytkownika jako domyślnej nazwy bazy danych jest prawdopodobnie bardziej przydatna niż używanie jakiejś stałej domyślnej nazwy bazy danych (np. „Postgres”).
user686249

5
jak uruchomić skrypt SQL, który faktycznie tworzy bazę danych? w moim przypadku zawsze próbuje połączyć się z bazą danych <użytkownik>, gdy moim celem jest utworzenie kolejnej bazy danych: psql -U Username -f create_db.sqlto zwróci błąd:database Username doesn't exists
Kostanos

Fantastyczna odpowiedź, dziękuję, ale nasuwa się pytanie, dlaczego nie ma jej w wierszu poleceń? psql --help
Shawn Vader

1
psql -U Username postgresgdy nie masz jeszcze baz danych
Anatolii Stepaniuk

59
  1. Zaloguj się jako domyślny użytkownik: sudo -i -u postgres
  2. Utwórz nowego użytkownika: createuser --interactive
  3. Po wyświetleniu monitu o podanie nazwy roli wpisz nazwę użytkownika Linux i wybierz opcję Tak, aby pytanie administratora.
  4. Nadal zalogowany jako użytkownik Postgres, utwórz bazę danych: createdb <username_from_step_3>
  5. Potwierdź zniknięcie błędu (błędów), wprowadzając: psqlw wierszu polecenia.
  6. Dane wyjściowe powinny się wyświetlać psql (x.x.x) Type "help" for help.

Oszczędź mi dużo czasu.
Jp Reddy,

Musiałem to zrobić w systemie Windows. Ustaw nową nazwę użytkownika pg na Linux un. Naprawiony.
RichieRich

To działało dla mnie jak urok
Obietnica Preston

41

Zaloguj się przy użyciu domyślnej bazy danych template1:

#psql -d template1
#template1=# \l

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

Utwórz bazę danych za pomocą identyfikatora użytkownika:

template1=# CREATE DATABASE gogasca WITH OWNER gogasca ENCODING 'UTF8';
CREATE DATABASE

Wyjdź, a następnie zaloguj się ponownie

template1=# \q
gonzo:~ gogasca$ psql -h localhost
psql (9.4.0)
Type "help" for help.

gogasca=# \l
                                List of databases
   Name    |  Owner  | Encoding |   Collate   |    Ctype    |  Access privileges  
-----------+---------+----------+-------------+-------------+---------------------
 gogasca   | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres  | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
 template1 | gogasca | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/gogasca         +
           |         |          |             |             | gogasca=CTc/gogasca
(4 rows)

20

Napotkałem ten sam błąd podczas próby otwarcia postgresql na Macu

psql: FATAL:  database "user" does not exist

Znalazłem to proste polecenie, aby je rozwiązać:

metoda1

$ createdb --owner=postgres --encoding=utf8 user

i wpisz

 psql

Metoda 2:

psql -d postgres

5
Metoda 2 uratowała mi życie
tom10271,

9

Miałem ten sam problem, wystarczyło psql -d postgresto zrobić (wpisz polecenie w terminalu)


6

Ten błąd może również wystąpić, jeśli zmienna środowiskowa PGDATABASE jest ustawiona na nazwę bazy danych, która nie istnieje.

W OSX widziałem następujący błąd podczas próby uruchomienia psql z menu Postgress.app:

psql: FATAL: database "otherdb" does not exist

Rozwiązaniem tego błędu było usunięcie export PGDATABASE=otherdbz ~/.bash_profile:

Ponadto, jeśli PGUSER jest ustawiony na coś innego niż twoja nazwa użytkownika, wystąpi następujący błąd:

psql: FATAL: role "note" does not exist

Rozwiązaniem jest usunięcie export PGUSER=notmez ~/.bash_profile.


5

Po instalacji postgres, w moim przypadku jest wersja 12.2, uruchomiłem poniższe polecenie createdb.

$ createdb `whoami`

$ psql

psql (12.2)
Type "help" for help.

macuser=# 

na zdrowie, to zadziałało dla mnie
FaISalBLiNK

4

Ponieważ to pytanie jest pierwsze w wynikach wyszukiwania, i tak przedstawię tutaj inne rozwiązanie innego problemu, aby nie mieć duplikatu tytułu.

Ten sam komunikat o błędzie może pojawić się podczas uruchamiania pliku zapytania psqlbez określania bazy danych. Ponieważ usew postgresql nie ma instrukcji, musimy podać bazę danych w wierszu poleceń, na przykład:

psql -d db_name -f query_file.sql

1
i szablon db1 zawsze istnieje
styczeń

4

Jak stwierdza dokumentacja utworzonab :

Pierwsza baza danych jest zawsze tworzona przez komendę initdb podczas inicjalizacji obszaru przechowywania danych ... Ta baza danych nazywa się postgres.

Więc jeśli niektóre dystrybucje OS / postgresql robią to inaczej, z pewnością nie jest to domyślny / standardowy (właśnie zweryfikowałem, że initdbw openSUSE 13.1 tworzy DB „postgres”, ale nie „<użytkownik>”). Krótko mówiąc, psql -d postgresoczekuje się, że będzie używany, gdy użytkownik będzie inny niż „postgres”.

Oczywiście zaakceptowana odpowiedź, uruchomiona w createdbcelu utworzenia bazy danych o nazwie takiej jak użytkownik, również działa, ale tworzy zbędną bazę danych.


1

miał problem z użyciem sterownika JDBC, więc wystarczy dodać bazę danych (być może zbędnie w zależności od używanego narzędzia) po nazwie hosta w adresie URL, np. jdbc:postgres://<host(:port)>/<db-name>

dalsze szczegóły są udokumentowane tutaj: http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT


Wiem, że to trochę nie na temat, biorąc pod uwagę, że został poproszony tylko o psql, ale Google przywiózł mnie tutaj z moim problemem, więc myślę, że warto tu wspomnieć
Andreas Dietrich

1

Połącz się z postgres za pośrednictwem istniejącego administratora.

Utwórz bazę danych według nazwy użytkownika, przez który łączysz się z postgres.

create database username;

Teraz spróbuj połączyć się za pomocą nazwy użytkownika


1

Spróbuj użyć-

psql -d postgres

Kiedy biegałem, miałem również ten sam problem psql


0

Po pierwsze, pomocne jest utworzenie bazy danych o tej samej nazwie, co bieżące użycie, aby uniknąć błędu, gdy chcesz po prostu użyć domyślnej bazy danych i utworzyć nowe tabele bez jawnego podawania nazwy bazy danych.

Zamień „skynotify” na swoją nazwę użytkownika:

psql -d postgres -c "CREATE DATABASE skynotify ENCODING 'UTF-8';"

-d wyraźnie deklaruje, której bazy danych użyć jako domyślnej dla instrukcji SQL, które nie zawierają jawnie nazwy db podczas tej interaktywnej sesji.

PODSTAWY UZYSKANIA WYRAŹNEGO OBRAZU CO SERWER PostgresQL.

Musisz połączyć się z istniejącą bazą danych, aby korzystać z psql interaktywnie. Na szczęście możesz poprosić psql o listę baz danych:

psql -l

.

                                          List of databases
               Name               | Owner  | Encoding |   Collate   |    Ctype    | Access privileges 
----------------------------------+-----------+----------+-------------+-------------+-------------------
 skynotify                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 myapp_dev                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 postgres                         | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 ruby-getting-started_development | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | 
 template0                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
 template1                        | skynotify | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
(6 rows)

To NIE uruchamia interaktywnej konsoli, po prostu wysyła tabelę tekstową do terminala.

Jak mówi inna odpowiedź, postgres jest zawsze tworzony, więc powinieneś używać go jako bezpiecznej bazy danych, gdy chcesz, aby konsola zaczęła działać na innych bazach danych. Jeśli go nie ma, to wypisz bazy danych, a następnie użyj dowolnej z nich.

W podobny sposób wybierz tabele z bazy danych:

psql -d postgres -c "\dt;"

Moja baza danych „postgres” nie ma tabel, ale każda baza danych wyśle ​​tabelę tekstową do terminala (standardowe wyjście).

I dla kompletności możemy również wybrać wszystkie wiersze z tabeli:

psql -d ruby-getting-started_development -c "SELECT * FROM widgets;"

.

 id | name | description | stock | created_at | updated_at 
----+------+-------------+-------+------------+------------
(0 rows)

Nawet jeśli zwróconych zostanie zero wierszy, otrzymasz nazwy pól.

Jeśli tabele zawierają więcej niż tuzin wierszy lub nie masz pewności, bardziej przydatne będzie rozpoczęcie od liczby wierszy, aby zrozumieć, ile danych znajduje się w bazie danych:

 psql -d ruby-getting-started_development -c "SELECT count(*) FROM widgets;"

.

 count 
-------
     0
(1 row)

I nie to, że „1 wiersz” myli cię, to po prostu reprezentuje liczbę wierszy zwróconych przez zapytanie, ale 1 wiersz zawiera liczbę, którą chcesz, czyli 0 w tym przykładzie.

UWAGA: baza danych utworzona bez zdefiniowanego właściciela będzie własnością bieżącego użytkownika.


0

Wypróbowałem niektóre z tych rozwiązań, ale nie do końca działały (choć były na dobrej drodze!)

Ostatecznie mój błąd to:

FATAL: uwierzytelnienie hasła nie powiodło się dla użytkownika

kiedy uruchomiłem następujące polecenie: psql

Więc uruchomiłem te dwa polecenia:

dropdb()
createdb()

UWAGA: spowoduje to usunięcie db, ale nie potrzebowałem go iz jakiegoś powodu nie mogłem już uzyskać dostępu do pqsl, więc usunąłem go i ponownie utworzyłem. Potem psqlznów pracował.


0

Nie jestem pewien, czy jest już dodany w odpowiedziach, odpowiedź Anatolija Stepaniuka była bardzo pomocna, co jest następujące.

psql -U Username postgres # when you have no databases yet

-1

Miałem ten problem podczas instalowania postgresql przez homebrew.

Musiałem utworzyć domyślnego superużytkownika „postgres” z:

createuser - interaktywna odpowiedź na pytania dla superużytkownika

createuser - interaktywna odpowiedź użytkownika na superużytkownika


-3

Nadal miałem powyższy problem po zainstalowaniu postgresql przy użyciu homebrew - Rozwiązałem go, umieszczając / usr / local / bin na mojej ścieżce przed / usr / bin


-12

W najprostszym wyjaśnieniu; to problem nooba. Po prostu piszę

str

spowoduje tę odpowiedź.

pgres <db_name> 

odniesie sukces bez błędu, jeśli użytkownik ma uprawnienia dostępu do bazy danych.

Można przejść do szczegółów wyeksportowanych zmiennych środowiskowych, ale jest to niepotrzebne ... jest to zbyt podstawowe, aby zawieść z jakiegokolwiek innego powodu.


5
Naprawdę nie podoba mi się „typ języka
noobowego

Nie zalecił też, jak rozwiązać problem, więc nie odpowiedział na pytanie.
Deborah,

1
nigdy nie słyszałempgres
Glenn Plas,
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.