986 Stimmen

Psql: FATAL: Die Datenbank "<user>" existiert nicht

Ich verwende die PostgreSql-App für Mac (http://postgresapp.com/). Ich habe es in der Vergangenheit auf anderen Maschinen verwendet, aber bei der Installation auf meinem Macbook treten einige Probleme auf. Ich habe die Anwendung installiert und ausgeführt:

psql -h localhost

Es gibt zurück:

psql: FATAL: Datenbank "" existiert nicht

Es scheint, dass ich nicht einmal die Konsole ausführen kann, um die Datenbank zu erstellen, die sie zu finden versucht. Das Gleiche passiert, wenn ich einfach ausführe:

psql 

oder wenn ich psql aus dem Anwendungsmenü starte:

Rechnerstatistiken:

  • OSX 10.8.4

  • psql (PostgreSQL) 9.2.4

Jede Hilfe ist willkommen.

Ich habe auch versucht, PostgreSql über Homebrew zu installieren und habe das gleiche Problem. Ich habe auch die Dokumentationsseite der Anwendung gelesen, die besagt:

Wenn Postgres.app zum ersten Mal gestartet wird, erstellt es die $USER-Datenbank, die die Standarddatenbank für psql ist, wenn keine angegeben ist. Der Standardbenutzer ist $USER, ohne Passwort.

Es scheint also, dass die Anwendung $USER nicht erstellt, jedoch habe ich es jetzt mehrmals installiert->deinstalliert->neu installiert, also muss es etwas mit meinem Rechner zu tun haben.

Ich habe die Antwort gefunden, bin mir aber nicht sicher, wie genau es funktioniert, da der Benutzer, der in diesem Thread geantwortet hat -> Getting Postgresql Running In Mac: Database "postgres" does not exist nicht weitergemacht hat. Ich habe den folgenden Befehl verwendet, um psql zu öffnen:

psql -d template1

Ich lasse diese Frage unbeantwortet, bis jemand eine Erklärung dafür liefern kann, warum dies funktioniert.

8voto

sdhca Punkte 81

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

Auf OSX sah ich den folgenden Fehler, als ich versuchte, psql aus dem Postgress.app-Menü zu starten:

psql: FATAL: Datenbank "otherdb" existiert nicht

Die Lösung für den Fehler bestand darin, export PGDATABASE=otherdb aus ~/.bash_profile zu entfernen:

Weiterhin wird bei Einstellung von PGUSER auf etwas anderes als deinen Benutzernamen folgender Fehler auftreten:

psql: FATAL: Rolle "note" existiert nicht

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

8voto

yosemite_k Punkte 2796

Nicht sicher, ob es bereits in den Antworten hinzugefügt wurde, war Anatolii Stepaniuk Antwort sehr hilfreich, die folgende ist.

psql -U Username postgres # wenn Sie noch keine Datenbanken haben

5voto

user686249 Punkte 629

Wie im createdb-Dokumentation steht:

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

Wenn also bestimmte OS/PostgreSQL-Distributionen dies anders machen, ist es sicherlich nicht der Standard (ich habe gerade überprüft, dass initdb auf openSUSE 13.1 die DB "postgres" erstellt, aber nicht ""). Kurz gesagt, es wird erwartet, dass psql -d postgres verwendet wird, wenn ein Benutzer verwendet wird, der nicht "postgres" ist.

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

4voto

Babken Vardanyan Punkte 12232

Da diese Frage die erste in den Suchergebnissen ist, werde ich hier trotzdem eine andere Lösung für ein anderes Problem einfügen, um keinen doppelten Titel zu haben.

Die gleiche Fehlermeldung kann auftreten, wenn Sie eine Abfrage-Datei in psql ohne Angabe einer Datenbank ausführen. Da es im PostgreSQL keinen use-Befehl gibt, müssen wir die Datenbank auf der Kommandozeile angeben, zum Beispiel:

psql -d db_name -f query_file.sql

3voto

Sky Notify Punkte 799

Zuerst ist es hilfreich, eine Datenbank mit demselben Namen wie Ihre aktuelle Verwendung zu erstellen, um den Fehler zu vermeiden, wenn Sie einfach die Standarddatenbank verwenden möchten und neue Tabellen ohne explizite Angabe des Datenbanknamens erstellen.

Ersetzen Sie "skynotify" durch Ihren Benutzernamen:

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

-d erklärt ausdrücklich, welche Datenbank als Standard für SQL-Anweisungen verwendet werden soll, die in dieser interaktiven Sitzung keinen expliziten Datenbanknamen enthalten.

GRUNDLAGEN, UM EIN KLARES BILD DAVON ZU BEKOMMEN, WAS IHRE PostgresQL SERVER ENTHÄLT.

Sie müssen sich mit einer vorhandenen Datenbank verbinden, um psql interaktiv zu verwenden. Glücklicherweise können Sie psql um eine Liste von Datenbanken bitten:

psql -l

.

                                          Liste der Datenbanken
               Name               | Besitzer | Kodierung | Sortierreihenfolge |  ctype  | Zugriffsrechte 
----------------------------------+-----------+----------+--------------------+---------+-------------------
 skynotify                        | skynotify | UTF8     | de_DE.UTF-8      | de_DE.UTF-8 | 
 myapp_dev                        | skynotify | UTF8     | de_DE.UTF-8      | de_DE.UTF-8 | 
 postgres                         | skynotify | UTF8     | de_DE.UTF-8      | de_DE.UTF-8 | 
 ruby-getting-started_development | skynotify | UTF8     | de_DE.UTF-8      | de_DE.UTF-8 | 
 template0                        | skynotify | UTF8     | de_DE.UTF-8      | de_DE.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
 template1                        | skynotify | UTF8     | de_DE.UTF-8      | de_DE.UTF-8 | =c/skynotify          +
                                  |           |          |             |             | skynotify=CTc/skynotify
(6 rows)

Dies startet NICHT die interaktive Konsole, sondern gibt lediglich eine textbasierte Tabelle auf dem Terminal aus.

Wie es in einer anderen Antwort heißt, ist postgres immer vorhanden, daher sollten Sie es als Ihre Ausfall-Datenbank verwenden, wenn Sie einfach die Konsole starten möchten, um an anderen Datenbanken zu arbeiten. Wenn es nicht vorhanden ist, listen Sie die Datenbanken auf und verwenden Sie eine davon.

Auf ähnliche Weise können Tabellen aus einer Datenbank ausgewählt werden:

psql -d postgres -c "\dt;"

Meine "postgres"-Datenbank hat keine Tabellen, aber jede Datenbank, die welche hat, gibt eine textbasierte Tabelle auf dem Terminal (Standardausgabe) aus.

Und für die Vollständigkeit können wir auch alle Zeilen aus einer Tabelle auswählen:

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

.

 id | name | beschreibung | bestand | erstellt_am | aktualisiert_am 
----+------+-------------+-------+------------+------------
(0 Zeilen)

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

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

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

.

 zählen 
-------
     0
(1 Reihe)

Und lassen Sie sich nicht von der "1 Reihe" verwirren, sie zeigt nur an, wie viele Zeilen von der Abfrage zurückgegeben werden, aber die 1 Zeile enthält die gewünschte Anzahl, die in diesem Beispiel 0 beträgt.

HINWEIS: Eine ohne definierten Besitzer erstellte Datenbank wird vom aktuellen Benutzer verwaltet.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X