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, à partir de/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 est occupé par pyrrho, 5432 est attribué à pg. Je peux me connecter avec
psql -p 5432
mais pourquoi psql pense-t-il qu'il s'agit de 5433 et comment puis-je faire en sorte que psql soit au bon endroit par défaut?
/etc/services
est seulement un conseil, c'est une liste de ports bien connus. Cela ne signifie pas que tout fonctionne réellement sur ce port ou que le service nommé s'exécutera sur ce port.
Dans le cas de PostgreSQL, il est typique d’utiliser le port 5432 s’il est disponible. Si ce n'est pas le cas, la plupart des installateurs choisiront le port libre suivant, généralement le 5433.
Vous pouvez voir ce qui est réellement en cours d'exécution à l'aide de l'outil netstat
(disponible sous 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 fouillis horrible de différents packages PostgreSQL - l'ancienne version de PostgreSQL d'Apple intégrée au système d'exploitation, Postgres.app, Homebrew, Macports, le programme d'installation d'EnterpriseDB, etc.
En fin de compte, l’utilisateur installe Pg et démarre un serveur à partir d’un package, mais utilise les clients psql
et libpq
à partir d’un package différent. Cela se produit généralement lorsqu'ils exécutent Postgres.app ou homebrew Pg et qu'ils se connectent à la psql
fournie avec le système d'exploitation. Non seulement ces ports ont parfois des ports par défaut différents, mais la Pg fournie avec Mac OS X a un chemin de socket unix par défaut différent , de sorte que même si le serveur fonctionne sur le même port, il n'écoute pas même socket unix.
La plupart des utilisateurs de Mac contournent 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
. Plusieurs instances de PostgreSQL peuvent être en cours d'exécution. Assurez-vous donc 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 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 votre système PATH
de sorte que les psql
et libpq
associés au système PostgreSQL que vous exécutez soient réellement ceux trouvés 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 donner beaucoup plus de détails de ce côté sans perdre plus de temps que ce qui est actuellement disponible.
Réponse rapide sur OSX, définissez vos variables d’environnement.
exporter PGHOST = localhost
exportation PGPORT = 5432
Ou tout ce dont vous avez besoin.
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 port
dans ce fichier.
Cela semble être l’une des raisons les plus courantes, si vous installez une nouvelle version de PostgreSQL sans arrêter le service d’une installation existante. C'était aussi un casse-tête particulier pour moi. Avant d'installer ou de mettre à niveau, en particulier sous OS X, et d'utiliser le programme d'installation en un clic à partir de Enterprise DB, vérifiez l'état de l'ancienne installation avant de poursuivre.
Grâce à @a_horse_with_no_name 's comment , 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 alors qu'il hébergeait le service à 5432.
J'ai rencontré ce problème aussi, j'ai fini par avoir deux serveurs postgres fonctionnant en même temps. J'ai désinstallé l'un d'entre eux et changé le port à 5432 et fonctionne bien maintenant.
Pour moi dans PgAdmin 4 sur Mac OS High Sierra , En cliquant sur PostrgreSQL10 base de données sous Serveurs dans la colonne de gauche, puis sur Propriétés onglet, montrait 5433 en tant que 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 Éditer sous l’onglet Propriétés , puis l’a changé en 5432 , enregistré, ce qui a résolu le problème. Allez comprendre.