it-swarm.com.de

psql: FATAL: Datenbank "<Benutzer>" existiert nicht

Ich verwende die PostgreSql-App für Mac ( http://postgresapp.com/ ). Ich habe es in der Vergangenheit auf anderen Computern verwendet, aber es bereitet mir Probleme, wenn ich es auf meinem Macbook installiere. Ich habe die Anwendung installiert und ausgeführt:

psql -h localhost

Es gibt zurück:

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

Es scheint, dass ich nicht einmal die Konsole ausführen kann, um die Datenbank zu erstellen, die es zu finden versucht. Das gleiche passiert, wenn ich gerade renne:

psql 

oder wenn ich psql über das Anwendungs-Dropdown-Menü starte:

Maschinenstatistik:

  • OSX 10.8.4

  • psql (PostgreSQL) 9.2.4

Jede Hilfe wird geschätzt.

Ich habe auch versucht, PostgreSql über Homebrew zu installieren, und ich erhalte das gleiche Problem. Ich habe auch die Seite mit der Anwendungsdokumentation gelesen, auf der Folgendes angegeben ist:

Beim ersten Start von Postgres.app wird die $ USER-Datenbank erstellt. Dies ist die Standarddatenbank für psql, wenn keine angegeben ist. Der Standardbenutzer ist $ USER ohne Kennwort.

Anscheinend erstellt die Anwendung $ USER nicht. Ich habe es jedoch mehrmals installiert -> deinstalliert - neu installiert. Es muss also etwas mit meinem Computer zu tun haben.

Ich habe die Antwort gefunden, bin mir aber nicht sicher, wie es genau funktioniert, als der Benutzer, der auf diesen Thread geantwortet hat -> Postgresql unter Mac ausführen lässt: Datenbank "postgres" existiert nicht hat nicht nachgefasst. Ich habe den folgenden Befehl verwendet, um psql zum Öffnen zu bringen:

psql -d template1

Ich lasse diese Frage so lange unbeantwortet, bis jemand erklären kann, warum dies funktioniert.

614
Ryan Rich

Es scheint, dass Ihr Paketmanager die Datenbank mit dem Namen $ user nicht für Sie erstellt hat. Der Grund dass

psql -d template1

für Sie funktioniert, dass template1 eine Datenbank ist, die von postgres selbst erstellt wurde und auf allen Installationen vorhanden ist. Sie können sich anscheinend bei template1 anmelden, sodass Ihnen von der Datenbank einige Rechte zugewiesen werden müssen. Versuchen Sie dies an einer Shell-Eingabeaufforderung:

createdb

und dann sehen, ob Sie sich erneut mit anmelden können

psql -h localhost

Dadurch wird einfach eine Datenbank für Ihren angemeldeten Benutzer erstellt, nach der Sie meiner Meinung nach suchen. Wenn createdb fehlschlägt, haben Sie nicht genügend Rechte, um Ihre eigene Datenbank zu erstellen, und Sie müssen herausfinden, wie das Homebrew-Paket repariert werden kann.

1050
Kirk Roybal

Führen Sie am Terminal einfach den Befehl im Eingabeaufforderungsfenster aus. (Nicht in psql).

createdb <user>

Versuchen Sie dann erneut, Postgres auszuführen.

142
Dhananjay

Standardmäßig versucht postgres, eine Verbindung zu einer Datenbank mit demselben Namen wie Ihr Benutzer herzustellen. Um dieses Standardverhalten zu verhindern, geben Sie einfach Benutzer und Datenbank an:

psql -U Username DatabaseName 
129
Aneer Anwar
  1. Melden Sie sich als Standardbenutzer an: Sudo -i -u postgres
  2. Neuen Benutzer erstellen: createuser --interactive
  3. Wenn Sie zur Eingabe des Rollennamens aufgefordert werden, geben Sie den Linux-Benutzernamen ein und wählen Sie Ja zur Superuser-Frage.
  4. Immer noch als postgres-Benutzer angemeldet, erstelle eine Datenbank: createdb <username_from_step_3>
  5. Bestätigen Sie, dass die Fehler verschwunden sind, indem Sie an der Eingabeaufforderung Folgendes eingeben: psql.
  6. Die Ausgabe sollte psql (x.x.x) Type "help" for help. zeigen
51
user286539

Mit der Standarddatenbank template1 anmelden:

#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)

Erstellen Sie eine Datenbank mit Ihrer Benutzer-ID:

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

Beenden Sie und melden Sie sich erneut an

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)
39
user260826

Beim Versuch, postgresql auf einem Mac zu öffnen, trat derselbe Fehler auf

psql: FATAL:  database "user" does not exist

Ich fand diesen einfachen Befehl, um es zu lösen:

methode 1

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

und Typ

 psql

Methode 2:

psql -d postgres
17
Dinesh Pallapa

Hatte das gleiche Problem, ein einfaches psql -d postgres hat es getan (Geben Sie den Befehl im Terminal ein)

7
rust

Dieser Fehler kann auch auftreten, wenn die Umgebungsvariable PGDATABASE auf den Namen einer nicht vorhandenen Datenbank festgelegt ist.

Unter OSX habe ich beim Versuch, psql über das Postgress.app-Menü zu starten, den folgenden Fehler festgestellt:

psql: FATAL: database "otherdb" does not exist

Die Lösung des Fehlers bestand darin, export PGDATABASE=otherdb aus ~/.bash_profile zu entfernen:

Wenn PGUSER auf einen anderen Wert als Ihren Benutzernamen festgelegt ist, tritt der folgende Fehler auf:

psql: FATAL: role "note" does not exist

Die Lösung besteht darin, export PGUSER=notme aus ~/.bash_profile zu entfernen.

5
sdhca

Da diese Frage die erste in den Suchergebnissen ist, werde ich hier ohnehin eine andere Lösung für ein anderes Problem angeben, damit es keinen doppelten Titel gibt.

Dieselbe Fehlermeldung kann auftreten, wenn eine Abfragedatei in psql ohne Angabe einer Datenbank ausgeführt wird. Da es in postgresql keine use -Anweisung gibt, müssen wir die Datenbank in der Befehlszeile angeben, zum Beispiel:

psql -d db_name -f query_file.sql
4

Wie die createdb-Dokumentation besagt:

Die erste Datenbank wird immer mit dem Befehl initdb erstellt, wenn der Datenspeicherbereich initialisiert wird ... Diese Datenbank heißt postgres.

Wenn also bestimmte OS/postgresql-Distributionen dies anders machen, ist dies sicherlich nicht der Standard (nur überprüft, dass initdb unter openSUSE 13.1 die Datenbank "postgres" erstellt, nicht jedoch "<user>"). Kurz gesagt, psql -d postgres wird voraussichtlich verwendet, wenn ein anderer Benutzer als "postgres" verwendet wird.

Offensichtlich funktioniert die akzeptierte Antwort, createdb auszuführen, um eine DB mit dem Namen des Benutzers zu erstellen, ebenfalls, erstellt jedoch eine überflüssige DB.

4
user686249

hatte das Problem mit der Verwendung des JDBC-Treibers, daher muss man die Datenbank (möglicherweise redundant, abhängig vom verwendeten Tool) nach dem Hostnamen in der URL hinzufügen, z. jdbc:postgres://<Host(:port)>/<db-name>

weitere Details sind hier dokumentiert: http://www.postgresql.org/docs/7.4/static/jdbc-use.html#JDBC-CONNECT

1

Zunächst ist es hilfreich, eine Datenbank mit dem gleichen Namen wie Ihre aktuelle Verwendung zu erstellen, um den Fehler zu vermeiden, wenn Sie nur die Standarddatenbank verwenden und neue Tabellen erstellen möchten, ohne den Namen einer Datenbank explizit zu deklarieren.

Ersetzen Sie "skynotify" durch Ihren Benutzernamen:

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

-d deklariert explizit, welche Datenbank als Standard für SQL-Anweisungen verwendet werden soll, die während dieser interaktiven Sitzung keinen Datenbanknamen enthalten.

GRUNDLAGEN, UM EIN KLARES BILD VON DEM ZU ERHALTEN, WAS IHR PostgresQL-SERVER ENTHÄLT.

Sie müssen eine Verbindung zu einer vorhandenen Datenbank herstellen, um psql interaktiv verwenden zu können. Glücklicherweise können Sie psql nach einer Liste von Datenbanken fragen:

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)

Dadurch wird die interaktive Konsole NICHT gestartet. Sie gibt lediglich eine textbasierte Tabelle an das Terminal aus.

Wie aus einer anderen Antwort hervorgeht, wird postgres immer erstellt. Sie sollten es also als ausfallsichere Datenbank verwenden, wenn Sie nur möchten, dass die Konsole mit anderen Datenbanken funktioniert. Ist dies nicht der Fall, listen Sie die Datenbanken auf und verwenden Sie eine der Datenbanken.

Wählen Sie auf ähnliche Weise Tabellen aus einer Datenbank aus:

psql -d postgres -c "\dt;"

Meine "postgres" -Datenbank hat keine Tabellen, aber jede Datenbank, die dies tut, gibt eine textbasierte Tabelle an das Terminal aus (Standardausgang).

Und der Vollständigkeit halber können wir auch alle Zeilen aus einer Tabelle auswählen:

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

.

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

Auch wenn keine Zeilen zurückgegeben werden, erhalten Sie die Feldnamen.

Wenn Ihre Tabellen mehr als ein Dutzend Zeilen enthalten oder Sie sich nicht sicher sind, ist es sinnvoller, mit einer Anzahl von Zeilen zu beginnen, um zu verstehen, wie viele Daten sich in Ihrer Datenbank befinden:

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

.

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

Und nicht, dass "1 Zeile" Sie verwirrt, es stellt nur dar, wie viele Zeilen von der Abfrage zurückgegeben werden, aber die 1 Zeile enthält die gewünschte Anzahl, die in diesem Beispiel 0 ist.

HINWEIS: Eine Datenbank, die ohne einen definierten Eigentümer erstellt wurde, gehört dem aktuellen Benutzer.

0
Sky Notify

Ich habe einige dieser Lösungen ausprobiert, aber sie haben nicht ganz funktioniert (obwohl sie auf dem richtigen Weg waren!)

Am Ende war mein Fehler:

FATAL: Kennwortauthentifizierung für Benutzer fehlgeschlagen

als ich den folgenden Befehl ausführte: psql

Also habe ich diese beiden Befehle ausgeführt:

dropdb()
createdb()

HINWEIS: dies wird entferne die Datenbank, aber ich brauchte sie nicht und aus irgendeinem Grund konnte ich nicht mehr auf pqsl zugreifen, also habe ich sie entfernt und neu erstellt. Dann hat psql wieder funktioniert.

0
Ben Cartwright

Stellen Sie über den vorhandenen Superuser eine Verbindung zu postgres her.

Erstellen Sie eine Datenbank mit dem Namen des Benutzers, über den Sie eine Verbindung zu postgres herstellen.

create database username;

Versuchen Sie nun, eine Verbindung über den Benutzernamen herzustellen

0