Hmmm ...
Wenn Sie in pgAdminIII eine Verbindung mit dem Benutzernamen und dem Kennwort herstellen können, aber keine Verbindung herstellen können, stellen psql
diese beiden Programme wahrscheinlich eine unterschiedliche Verbindung zur Datenbank her.
[Wenn Sie eine Verbindung zu verschiedenen Datenbanken herstellen, versuchen Sie zunächst, eine Verbindung zu derselben Datenbank herzustellen. Siehe unten.]
Von PostgreSQL: Dokumentation: 9.3: psql :
Wenn Sie den Hostnamen weglassen, stellt psql über einen Unix-Domain-Socket eine Verbindung zu einem Server auf dem lokalen Host oder über TCP / IP zu localhost auf Computern her, die keine Unix-Domain-Sockets haben.
Wenn Sie so etwas nicht ausführen psql ... -h host_name ...
und Ubuntu ausführen, psql
sollte die Verbindung über einen Unix-Domain-Socket hergestellt werden, sodass PostgreSQL wahrscheinlich nicht so konfiguriert ist, dass eine der Kennwortauthentifizierungsmethoden für den Postgres- Benutzer zulässig ist.
Sie können dies testen, indem Sie Folgendes ausführen:
sudo -u postgres psql
Wenn dies funktioniert, ist Ihr Server wahrscheinlich so konfiguriert, dass der Postgres- Benutzer die Peer- Authentifizierung für lokale Verbindungen verwendet , dh das Betriebssystem fragt nach Ihrem Benutzernamen, um zu bestätigen, dass Sie Postgres sind .
Es ist also wahrscheinlich Ihre pg_hba.conf- Datei
Der vollständige Pfad der Datei wird etwas sein , wie /etc/postgresql/9.3/main/pg_hba.conf . Sie können es anzeigen, z sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more
.
Wenn Sie den Hostnamen in Ihrem psql
Befehl weglassen , sollten Sie eine Verbindung herstellen können, wenn Sie Ihrer Datei pg_hba.conf den folgenden Eintrag hinzufügen :
# Connection type Database User IP addresses Method
local all postgres md5
[Kommentierte Zeilen in der Datei pg_hba.conf beginnen mit #
.]
Wenn Sie sind die Host - Namen in Ihrem einschließlich psql
Befehl, fügen Sie diesen Eintrag statt:
# Connection type Database User IP addresses Method
host all postgres 127.0.0.1/32 md5
Sie müssen den Eintrag eingeben, bevor andere Einträge für Ihre Verbindung über übereinstimmen psql
. Wenn Sie sich nicht sicher sind, wo Sie es platzieren sollen, setzen Sie es einfach vor die erste nicht kommentierte Zeile.
Mehr über pg_hba.conf
Aus PostgreSQL: Dokumentation: 9.3: Die Datei pg_hba.conf [meine fettgedruckte Hervorhebung]:
Der erste Datensatz mit einem übereinstimmenden Verbindungstyp , einer Clientadresse , einer angeforderten Datenbank und einem Benutzernamen wird zur Authentifizierung verwendet. Es gibt kein "Durchfallen" oder "Sichern": Wenn ein Datensatz ausgewählt wird und die Authentifizierung fehlschlägt, werden nachfolgende Datensätze nicht berücksichtigt. Wenn kein Datensatz übereinstimmt, wird der Zugriff verweigert.
Beachten Sie, dass Datensätze bei der Authentifizierungsmethode nicht übereinstimmen. Wenn Ihre Datei pg_hba.conf den folgenden Eintrag enthält:
# Connection type Database User IP addresses Method
local all postgres peer
Dann können Sie keine Verbindung herstellen über:
psql -u postgres
Es sei denn, einer dieser Einträge befindet sich in Ihrer Datei pg_hba.conf über dem vorherigen Eintrag:
# Connection type Database User IP addresses Method
local all postgres md5
local all postgres password # Unencrypted!
local all all md5
local all all password # Unencrypted!