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.
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.
Führen Sie am Terminal einfach den Befehl im Eingabeaufforderungsfenster aus. (Nicht in psql).
createdb <user>
Versuchen Sie dann erneut, Postgres auszuführen.
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
Sudo -i -u postgres
createuser --interactive
createdb <username_from_step_3>
psql
.psql (x.x.x) Type "help" for help.
zeigenMit 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)
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
Hatte das gleiche Problem, ein einfaches psql -d postgres
hat es getan (Geben Sie den Befehl im Terminal ein)
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.
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
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.
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
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.
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.
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