it-swarm.com.de

postgresql Port Verwirrung 5433 oder 5432?

Ich habe Postgresql unter OSX installiert. Wenn ich psql starte, bekomme ich

$ psql
psql: could not connect to server: No such file or directory
    Is the server running locally and accepting
    connections on Unix domain socket "/tmp/.s.PGSQL.5433"?

Allerdings aus/etc/services

postgresql      5432/udp    # PostgreSQL Database
postgresql      5432/tcp    # PostgreSQL Database
#                          Tom Lane <[email protected]>
pyrrho          5433/tcp    # Pyrrho DBMS
pyrrho          5433/udp    # Pyrrho DBMS

5433 ist von Pyrrho besetzt, 5432 ist pg zugeordnet. Ich kann mich mit verbinden

psql -p 5432

aber warum glaubt psql, dass es 5433 ist, und wie kann ich psql standardmäßig an der richtigen Stelle aussehen lassen?

102
highBandWidth

/etc/services ist nur eine Empfehlung, es ist eine Liste bekannter Ports. Dies bedeutet nicht, dass tatsächlich etwas an diesem Port ausgeführt wird oder dass der benannte Dienst an diesem Port ausgeführt wird.

Im Falle von PostgreSQL wird normalerweise Port 5432 verwendet, sofern verfügbar. Ist dies nicht der Fall, wählen die meisten Installationsprogramme den nächsten freien Port (normalerweise 5433).

Sie können sehen, was tatsächlich ausgeführt wird, indem Sie das Tool netstat verwenden (verfügbar unter OS X, Windows und Linux, wobei die Befehlszeilensyntax in allen drei Bereichen variiert).

Dies ist auf Mac OS X-Systemen durch das schreckliche Durcheinander verschiedener PostgreSQL-Pakete noch komplizierter - Apples alte Version von PostgreSQL, die in das Betriebssystem integriert ist, Postgres.app, Homebrew, Macports, das EnterpriseDB-Installationsprogramm usw.

Was am Ende passiert, ist, dass der Benutzer Pg installiert und einen Server von einem Paket aus startet, den Client psql und libpq jedoch aus einem anderen Paket verwendet. Dies tritt normalerweise auf, wenn Postgres.app oder Homebrew Pg ausgeführt wird und eine Verbindung mit der psql hergestellt wird, die mit dem Betriebssystem ausgeliefert wurde. Diese haben nicht nur manchmal andere Standard-Ports, sondern auch die mit Mac OS X gelieferte Pg hat einen anderen Standard-Unix-Socket-Pfad . Wenn also der Server auf demselben Port läuft, hört er auch nicht auf gleiche Unix-Buchse.

Die meisten Mac-Benutzer umgehen dieses Problem, indem sie einfach TCP/IP mit psql -h localhost verwenden. Sie können bei Bedarf auch einen Port angeben, z. B. psql -h localhost -p 5433. Möglicherweise haben Sie mehrere PostgreSQL-Instanzen, stellen Sie also sicher, dass Sie mit select version() und SHOW data_directory; eine Verbindung zur richtigen Instanz herstellen.

Sie können auch ein Unix-Socket-Verzeichnis angeben. Überprüfen Sie die Einstellung unix_socket_directories der PostgreSQL-Instanz, zu der Sie eine Verbindung herstellen möchten, und geben Sie diese mit psql -h an, z. B. psql -h /tmp.

Eine sauberere Lösung besteht darin, Ihr System PATH so zu korrigieren, dass die psql und libpq, die mit dem von Ihnen verwendeten PostgreSQL verknüpft sind, zuerst auf der PATH gefunden werden. Die Details dazu hängen von Ihrer Mac OS X-Version und den installierten Pg-Paketen ab. Ich benutze keinen Mac und kann auf dieser Seite nicht viel mehr Details anbieten, ohne mehr Zeit als derzeit verfügbar zu haben.

148
Craig Ringer

Schnelle Antwort unter OSX, stellen Sie Ihre Umgebungsvariablen ein.

export PGHOST = localhost

export PGPORT = 5432

Oder was auch immer du brauchst. 

20
DavidLStacy

Der Standardport von Postgres wird im Allgemeinen wie folgt konfiguriert:

Sudo vi /<path to your installation>/data/postgresql.conf

Auf Ubuntu könnte dies sein:

Sudo vi /<path to your installation>/main/postgresql.conf

Suchen Sie in dieser Datei nach port.

11
Risadinha

Es scheint, dass dies einer der häufigsten Gründe ist, wenn Sie eine neue Version von PostgreSQL installieren, ohne den Dienst einer vorhandenen Installation zu beenden. Das war auch ein besonderer Kopfschmerz von mir. Vergewissern Sie sich vor dem Installieren oder Aktualisieren, insbesondere unter OS X, und verwenden Sie das One-Click-Installationsprogramm von Enterprise DB. Stellen Sie sicher, dass Sie den Status der alten Installation überprüfen, bevor Sie fortfahren.

7
Eron Lloyd

Dank @a_horse_with_no_name 's comment habe ich meine PGPORT-Definition in pg_env.sh in 5432 geändert. Das hat das Problem für mich behoben. Ich weiß nicht, warum Postgres es ursprünglich auf 5433 gesetzt hat, als der Dienst bei 5432 gehostet wurde.

5
highBandWidth

Ich bin auch auf dieses Problem gestoßen, es endete damit, dass ich zwei Postgres-Server gleichzeitig hatte. Ich habe eine davon deinstalliert und den Port auf 5432 zurückgesetzt und funktioniert jetzt einwandfrei.

2
Krazzzeee

Für mich in PgAdmin 4 auf Mac OS High Sierra, Klicken Sie auf die Datenbank PostrgreSQL10 unter Servers in der linken Spalte, dann auf die Eigenschaften Registerkarte, zeigte 5433 als Port unter Verbindung. (Ich weiß nicht warum, weil ich mich bei der Installation für 5432 entschieden habe). Jedenfalls habe ich auf das Bearbeiten-Symbol unter der Registerkarte Eigenschaften geklickt. Ändern Sie den Wert in 5432, speichern Sie das Problem und lösen Sie das Problem. Stelle dir das vor.

0
Alan Simpson