web-dev-qa-db-fra.com

Homebrew installé PostgreSQL n'a pas pu se connecter, les fichiers de base de données sont incompatibles avec le serveur

Voici le message d'erreur que je reçois aujourd'hui lorsque j'essaie de me connecter à mes bases de données PosgreSQL localhost en utilisant 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.5432"?

J'ai installé PostgreSQL en utilisant Homebrew et ce matin, j'ai désinstallé et réinstallé en utilisant cet utilitaire, sans aucun changement observable. Le client psql fonctionne très bien et je peux toujours l'utiliser pour me connecter à des bases de données sur le réseau. Je ne me connecte à mes bases de données locales qu'une fois par mois ou deux, et cela fonctionnait bien avant, donc je suppose que cela est dû à une mise à jour automatique mais je ne sais pas laquelle. Mac OS s'est récemment mis à niveau vers High Sierra (10.13).

Le même message d'erreur est apparu ici en 2014 ( link ) mais c'était un cas où un gars avait du mal à démarrer le serveur. Dans mon cas, je crois qu'il fonctionne - j'ai utilisé brew services start postgresql et oui, j'ai redémarré plusieurs fois aujourd'hui. Cependant, le fichier mentionné dans l'erreur, /tmp/.s.PGSQL.5432, n'existe pas sur mon système. Je pense que c'est le cas d'une erreur de configuration. Quelqu'un a une idée de comment réparer?

Mise à jour: j'ai essayé de démarrer le serveur manuellement (comme recommandé par Evan) et je pense que j'ai fait une percée. Voici l'erreur que j'obtiens lorsque j'essaie de le démarrer manuellement:

FATAL: database files are incompatible with server
DETAIL: The data directory was initialized by PostgreSQL version 9.6, which is not compatible with this version 10.1.

Mise à jour 2: Finalement, j'ai résolu ce problème en remplaçant mon répertoire de données et en le réinitialisant avec une base de données vide en utilisant initdb comme dans la réponse marquée "correct". Pour être juste, les trois réponses ont été utiles. Je n'ai pas pu mettre à jour la base de données de l'ancienne version vers la nouvelle car je n'avais plus les binaires de l'ancienne version de Postgres.

7
workerjoe

Si vous ne disposez d'aucune donnée, cela semble être un problème avec Brew. Avez-vous exécuté la mise à niveau brew, il y a deux réponses sur StackOverflow qui traitent de cela, j'ai fusionné les deux pour essayer le meilleur des deux mondes.

  1. Sauvegarde

    launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
    Sudo mv /usr/local/var/postgres /usr/local/var/.postgres_bak;
    
  2. S'assurer que vous disposez de la dernière version

    brew update
    brew upgrade postgresql
    
  3. Soit, pas les deux réinitialiser ou essayer de mettre à jour votre répertoire de données

    1. Nuke it (recommencer à zéro, en laissant l'ancien sauvegarde)

      initdb /usr/local/var/postgres -E utf8
      
    2. Essayez de le mettre à niveau

      pg_upgrade -b /usr/local/Cellar/postgresql/$myOldVersion/bin/ -B /usr/local/Cellar/postgresql/$myNewVersion/bin -d /usr/local/var/.postgres_bak -D /usr/local/var/postgres
      
  4. Redémarrez le serveur.

    brew services start postgresql
    
  5. Supprimez la sauvegarde, si le serveur redémarre et que tout fonctionne, supprimez la sauvegarde

    Sudo rm -rf /usr/local/var/.postgres_bak
    
7
Evan Carroll

J'espère que vous n'avez pas exécuté brew cleanup postgresql encore. brew info donne toutes les informations pertinentes, y compris si vous avez toujours la version précédente et le fait que vous pourriez avoir besoin d'exécuter pg_upgrade (sortie raccourcie ci-dessous).

Cela vous indiquera la version de votre base de données: cat /usr/local/var/postgres/PG_VERSION

Si vous ne vouliez pas passer à PostgreSQL 10.1, et en supposant que votre version précédente est 9.6.6, cela pourrait suffire: brew switch postgresql 9.6.6

Si vous devez réinstaller une ancienne version, cela pourrait fonctionner: https://stackoverflow.com/a/9832084/279726

Il semble que le répertoire de données soit /usr/local/var/postgres par défaut (comme je n'ai pas changé le mien), voir la dernière ligne de sortie ci-dessous.

$ brew info postgresql
postgresql: stable 10.1 (bottled), HEAD
[...]
==> Caveats
To migrate existing data from a previous major version of PostgreSQL, see:
  https://www.postgresql.org/docs/10/static/upgrading.html

  You will need your previous PostgreSQL installation from brew to perform
  `pg_upgrade` or `pg_dumpall` depending on your upgrade method.

  Do not run `brew cleanup postgresql` until you have performed the migration.

To have launchd start postgresql now and restart at login:
  brew services start postgresql
Or, if you don't want/need a background service you can just run:
  pg_ctl -D /usr/local/var/postgres start
$

Mais si vous voulez utiliser 10.1, vous pouvez exécuter quelque chose comme ceci, en supposant toujours que vous exécutiez 9.6.6 auparavant (changer le nom du répertoire en fonction de votre précédent version PostgreSQL). Exécutez une commande à la fois et vérifiez la sortie avant de passer à la suivante:

mv -i /usr/local/var/postgres /usr/local/var/postgres96
mkdir /usr/local/var/postgres
pg_upgrade -b /usr/local/Cellar/postgresql/9.6.6/bin -B /usr/local/Cellar/postgresql/10.1/bin -d /usr/local/var/postgres96 -D /usr/local/var/postgres

Voir ici pour plus de détails: https://www.postgresql.org/docs/10/static/pgupgrade.html

********************************************************
* PLEASE MAKE BACKUPS BEFORE DOING ANY OF THE ABOVE!!! *
********************************************************

Le plus drôle, c'est que si j'essaie d'installer la dernière PostgreSQL, j'obtiens:

$ brew install postgresql
Error: postgresql 9.5.5 is already installed
To upgrade to 10.1, run `brew upgrade postgresql`

Je ne sais donc pas comment vous êtes passé de 9.6.x à 10.1 sans voir ce message ...

1
Kamal
  • Avez-vous une autre version de PostgreSQL installée, ou juste celle de brew?
  • Le serveur lui-même fonctionne-t-il pour que vous vous y connectiez, vérifiez Sudo ps aux?
  • Vous connectez-vous au bon port. Vérifiez netstat voir ce génial article de Craig .
  • Utilisez-vous brew pour passer à une nouvelle version de PostgreSQL? Si c'est le cas, vous voudrez peut-être vérifier cela question très populaire sur Stackoverflow

Vous pouvez également vouloir voir cet article, et démarrer le serveur manuellement .

0
Evan Carroll