confusion de port postgresql 5433 ou 5432?

J’ai installé postgresql sur OSX. Quand je lance psql, je reçois

$ 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, depuis / etc / services

 postgresql 5432/udp # PostgreSQL Database postgresql 5432/tcp # PostgreSQL Database # Tom Lane  pyrrho 5433/tcp # Pyrrho DBMS pyrrho 5433/udp # Pyrrho DBMS 

5433 est occupé par pyrrho, 5432 est affecté à pg. Je peux me connecter avec

 psql -p 5432 

mais pourquoi psql pense-t-il que c’est 5433 et comment faire pour que psql apparaisse au bon endroit par défaut?

/etc/services est uniquement un conseil, c’est une liste de ports connus. Cela ne signifie pas que quelque chose est en cours d’exécution sur ce port ou que le service nommé sera exécuté 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 gratuit, généralement 5433.

Vous pouvez voir ce qui fonctionne réellement en utilisant l’outil netstat (disponible sur OS X, Windows et Linux, avec une syntaxe de ligne de commande variant entre les trois).

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

Ce qui arrive, c’est que l’utilisateur installe Pg et démarre un serveur à partir d’un emballage, mais utilise le client psql et libpq partir d’un emballage différent. En général, cela se produit lorsqu’ils exécutent Postgres.app ou homebrew Pg et qu’ils se connectent avec le psql fourni avec le système d’exploitation. Non seulement ces ports ont-ils des ports par défaut différents, mais le fichier Pg fourni avec Mac OS X a un chemin de socket unix par défaut différent. Même si le serveur est exécuté sur le même port, il n’écoutera pas le même socket unix.

La plupart des utilisateurs de Mac travaillent autour de cela 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 de PostgreSQL en cours d’exécution, alors assurez-vous de vous connecter au bon en utilisant select version() et SHOW data_directory; .

Vous pouvez également spécifier un répertoire de socket unix; Vérifiez le paramètre unix_socket_directories 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 le PATH votre système de sorte que le psql et la libpq associés à PostgreSQL que vous utilisez réellement soient ceux qui se trouvent 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é-là sans passer plus de temps que ce qui est actuellement disponible.

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

exporter PGHOST = localhost

exporter PGPORT = 5432

Ou tout ce dont vous avez besoin.

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

 sudo vi //data/postgresql.conf 

Sur Ubuntu, cela pourrait être:

 sudo vi //main/postgresql.conf 

Recherchez le port dans ce fichier.

Il semble que l’une des raisons les plus courantes est que vous installez une nouvelle version de PostgreSQL sans arrêter le service d’une installation existante. C’était un casse-tête particulier pour moi aussi. Avant d’installer ou de mettre à niveau, en particulier sous 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 poursuivre.

Grâce au commentaire de @a_horse_with_no_name , j’ai changé ma définition PGPORT en 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 lorsqu’il hébergeait le service à 5432.

J’ai également rencontré ce problème et j’ai constaté que deux serveurs postgres fonctionnaient en même temps. J’ai désinstallé l’un d’eux et changé le port en 5432 et fonctionne correctement maintenant.

Pour moi, dans PgAdmin 4 sur Mac OS High Sierra , le fait de cliquer sur la firebase database PostrgreSQL10 sous Serveurs dans la colonne de gauche, puis sur l’onglet Propriétés , indiquait 5433 comme 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 , modifiez cela en 5432 , enregistré et cela a résolu le problème. Allez comprendre.