Postgresql Port Verwirrung 5433 oder 5432?

128

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"?

Jedoch von / etc / services

postgresql      5432/udp    # PostgreSQL Database
postgresql      5432/tcp    # PostgreSQL Database
#                          Tom Lane <tgl@sss.pgh.pa.us>
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 lasse ich psql standardmäßig an der richtigen Stelle aussehen?

grosse Bandbreite
quelle
5
Überprüfen Sie, ob die Umgebungsvariable definiert PGPORTist: postgresql.org/docs/current/static/libpq-envars.html
a_horse_with_no_name

Antworten:

187

/etc/servicesist nur eine Empfehlung, es ist eine Auflistung bekannter Häfen. Dies bedeutet nicht, dass tatsächlich etwas auf diesem Port ausgeführt wird oder dass der genannte Dienst auf diesem Port ausgeführt wird.

Im Fall von PostgreSQL ist es typisch, Port 5432 zu verwenden, wenn dieser verfügbar ist. Ist dies nicht der Fall, wählen die meisten Installateure den nächsten freien Port, normalerweise 5433.

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

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

Am Ende installiert der Benutzer Pg und startet einen Server aus einer Verpackung, verwendet jedoch den psqlund den libpqClient aus einer anderen Verpackung. In der Regel tritt dies auf, wenn sie Postgres.app oder Homebrew Pg ausführen und eine Verbindung mit dem psqlmit dem Betriebssystem gelieferten herstellen. Diese haben nicht nur manchmal unterschiedliche Standardports, sondern die mit Mac OS X gelieferte Pg hat auch einen anderen Standard-Unix-Socket-Pfad . Selbst wenn der Server auf demselben Port ausgeführt wird, hört er nicht denselben Unix-Socket ab.

Die meisten Mac-Benutzer umgehen dies, indem sie nur tcp / ip mit verwenden psql -h localhost. Bei Bedarf können Sie auch einen Port angeben, z psql -h localhost -p 5433. Möglicherweise werden mehrere PostgreSQL-Instanzen ausgeführt. Stellen Sie daher sicher, dass Sie mit select version()und eine Verbindung zur richtigen herstellen SHOW data_directory;.

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

Eine sauberere Lösung besteht darin, Ihr System PATHso zu korrigieren, dass das psqlund libpqdas mit dem PostgreSQL verknüpfte System , das Sie tatsächlich ausführen, das ist, was zuerst auf dem System gefunden wird PATH. Die Details dazu hängen von Ihrer Mac OS X-Version und den von Ihnen 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 verbringen.

Craig Ringer
quelle
23

Schnelle Antwort unter OSX, legen Sie Ihre Umgebungsvariablen fest.

>export PGHOST=localhost

>export PGPORT=5432

Oder was auch immer Sie brauchen.

DavidLStacy
quelle
16

Der Standardport von Postgres wird normalerweise konfiguriert in:

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

Unter Ubuntu könnte dies sein:

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

Suchen Sie portin dieser Datei nach.

Risadinha
quelle
Unter Mac OSX mit der BigSQL-Distribution ist es hier:~/PostgreSQL/data/pg96
Shane
7

Dank @a_horse_with_no_name ‚s Kommentar , änderte ich meine PGPORT Definition zu 5432 in pg_env.sh. Das hat das Problem für mich behoben. Ich weiß nicht, warum Postgres es ursprünglich als 5433 festgelegt hat, als es den Dienst bei 5432 hostete.

grosse Bandbreite
quelle
7

Es scheint, dass einer der häufigsten Gründe dafür ist, dass Sie eine neue Version von PostgreSQL installieren, ohne den Dienst einer vorhandenen Installation zu beenden. Dies war auch ein besonderer Kopfschmerz von mir. Überprüfen Sie vor der Installation oder Aktualisierung, insbesondere unter OS X und der Verwendung des Ein-Klick-Installationsprogramms von Enterprise DB, den Status der alten Installation, bevor Sie fortfahren.

Eron Lloyd
quelle
Ja, wir haben postgresql-9.5 installiert, als 9.4 bereits installiert war. Daher hat 9.5 5433 als Standardport ausgewählt
vikingsteve
Ich habe 5432 & 5433 für lange Zeit verwendet, ich habe 5436 gesehen, aber keine Ahnung, ob das nur jemand Kreativität oder ein Standard auf verschiedenen Betriebssystemen ist.
Deil
3

Ich bin auch auf dieses Problem gestoßen, und es endete damit, dass zwei Postgres-Server gleichzeitig ausgeführt wurden. Ich habe einen von ihnen deinstalliert und den Port wieder auf 5432 geändert und funktioniert jetzt einwandfrei.

Krazzzeee
quelle
2

Für mich in PgAdmin 4 unter Mac OS High Sierra wurde durch Klicken auf die PostrgreSQL10- Datenbank unter Server in der linken Spalte und dann auf die Registerkarte Eigenschaften 5433 als Port unter Verbindung angezeigt . (Ich weiß nicht warum, weil ich während der Installation 5432 gewählt habe). Wie auch immer, ich habe auf das Symbol Bearbeiten auf der Registerkarte Eigenschaften geklickt , das in 5432 geändert , gespeichert und das Problem behoben. Stelle dir das vor.

Alan Simpson
quelle
Sie können lediglich eine Verbindung zu dem Server herstellen, auf dem bereits 5432 ausgeführt wird, weshalb Sie danach eine Verbindung herstellen können. Der Server wurde gemäß Ihrer Installation auf 5432 ausgeführt, wie Sie korrekt angegeben haben.
Shane