confusion de port postgresql 5433 ou 5432?

128

J'ai installé postgresql sur OSX. Quand je lance psql, j'obtiens

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

Cependant, à partir de / 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 est occupé par pyrrho, 5432 est affecté à la pg. Je peux me connecter avec

psql -p 5432

mais pourquoi psql pense-t-il que c'est 5433 et comment puis-je faire en sorte que psql apparaisse au bon endroit par défaut?

bande passante élevée
la source
5
Vérifiez si la variable d'environnement PGPORTest définie: postgresql.org/docs/current/static/libpq-envars.html
a_horse_with_no_name

Réponses:

187

/etc/servicesest uniquement indicatif, c'est une liste de ports bien connus. Cela ne signifie pas que quoi que ce soit est réellement en cours d'exécution sur ce port ou que le service nommé fonctionnera sur ce port.

Dans le cas de PostgreSQL, il est courant d'utiliser le port 5432 s'il est disponible. Si ce n'est pas le cas, la plupart des installateurs choisiront le prochain port libre, généralement 5433.

Vous pouvez voir ce qui s'exécute réellement à l'aide de l' netstatoutil (disponible sur OS X, Windows et Linux, avec une syntaxe de ligne de commande variant entre les trois).

Ceci est encore compliqué sur les systèmes Mac OS X par l'horrible désordre des différents packages PostgreSQL - l'ancienne version d'Apple de PostgreSQL intégrée au système d'exploitation, Postgres.app, Homebrew, Macports, le programme d'installation d'EnterpriseDB, etc.

Ce qui finit par arriver, c'est que l'utilisateur installe Pg et démarre un serveur à partir d'un emballage, mais utilise le client psqlet à libpqpartir d'un emballage différent. Cela se produit généralement lorsqu'ils exécutent Postgres.app ou homebrew Pg et se connectent à psqlcelui livré avec le système d'exploitation. Non seulement ceux-ci ont parfois des ports par défaut différents, mais le Pg livré avec Mac OS X a un chemin de socket unix par défaut différent , donc même si le serveur fonctionne sur le même port, il n'écoutera pas le même socket unix.

La plupart des utilisateurs de Mac contournent ce problème en utilisant simplement tcp / ip avec psql -h localhost. Vous pouvez également spécifier un port si nécessaire, par exemple psql -h localhost -p 5433. Vous pouvez avoir plusieurs instances PostgreSQL en cours d'exécution, alors assurez-vous de vous connecter à la bonne en utilisant select version()et SHOW data_directory;.

Vous pouvez également spécifier un répertoire de socket unix; vérifiez le unix_socket_directoriesparamètre de l'instance PostgreSQL à laquelle vous souhaitez vous connecter et spécifiez-le avec psql -h, par exemple psql -h /tmp.

Une solution plus propre consiste à corriger votre système PATHafin que le psqlet libpqassocié au PostgreSQL que vous exécutez réellement soit ce qui se trouve en premier sur le PATH. Les détails de cela dépendent de votre version de Mac OS X et des packages Pg que vous avez installés. Je n'utilise pas Mac et je ne peux pas offrir beaucoup plus de détails de ce côté sans passer plus de temps que ce qui est actuellement disponible.

Craig Ringer
la source
24

Réponse rapide sur OSX, définissez vos variables d'environnement.

>export PGHOST=localhost

>export PGPORT=5432

Ou tout ce dont vous avez besoin.

DavidLStacy
la source
16

Le port par défaut de Postgres est généralement configuré dans:

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

Sur Ubuntu, cela pourrait être:

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

Recherchez portdans ce fichier.

Risadinha
la source
Sur Mac OSX avec la distribution BigSQL c'est ici:~/PostgreSQL/data/pg96
Shane
7

Merci à @a_horse_with_no_name de commentaire , j'ai changé ma définition PGPORT à 5432 dans pg_env.sh. Cela a résolu le problème pour moi. Je ne sais pas pourquoi postgres l'a initialement défini comme 5433 alors qu'il hébergeait le service à 5432.

bande passante élevée
la source
7

Il semble que l'une des raisons les plus courantes que cela se produise soit si vous installez une nouvelle version de PostgreSQL sans arrêter le service d'une installation existante. C'était aussi un de mes maux de tête. Avant d'installer ou de mettre à niveau, en particulier sur OS X et en utilisant le programme d'installation en un clic d'Enterprise DB, assurez-vous de vérifier l'état de l'ancienne installation avant de continuer.

Eron Lloyd
la source
Oui, nous avons installé postgresql-9.5 alors que 9.4 était déjà installé, donc 9.5 a choisi 5433 comme port par défaut
vikingsteve
J'ai utilisé 5432 et 5433 pendant longtemps, j'ai vu 5436 mais aucune idée si c'est juste une créativité de quelqu'un ou un défaut sur différents os-es.
Deil
3

J'ai aussi rencontré ce problème, il s'est avéré que j'avais deux serveurs postgres fonctionnant en même temps. J'ai désinstallé l'un d'eux et changé le port en 5432 et fonctionne bien maintenant.

Krazzzeee
la source
2

Pour moi, dans PgAdmin 4 sur Mac OS High Sierra , en cliquant sur la base de données PostrgreSQL10 sous Serveurs dans la colonne de gauche, puis sur l' onglet Propriétés , 5433 était le port sous Connexion . (Je ne sais pas pourquoi, car j'ai choisi 5432 lors de l'installation). Quoi qu'il en soit, j'ai cliqué sur l' icône Modifier sous l' onglet Propriétés , changez cela en 5432 , enregistré et cela a résolu le problème. Allez comprendre.

Alan Simpson
la source
Tout cela vous permet de vous connecter au serveur déjà exécuté sur 5432, c'est pourquoi vous pouvez vous connecter après cela. Le serveur fonctionnait sur 5432 par votre installation comme vous l'avez correctement indiqué.
Shane