web-dev-qa-db-fra.com

Comment mettre à niveau PostgreSQL de 9.5 à 9.6.1 sans perdre de données?

Quand j'ai essayé d'exécuter psql, j'ai eu

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

et quand j'ai vérifié Server.log, J'ai vu:

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

J'ai essayé de suivre ce tutoriel (de 9.4 à 9.5) pour la mise à niveau 9.6.1, mais continuez à recevoir ce message d'erreur

cannot write to log file pg_upgrade_internal.log
Failure, exiting

après avoir couru

$ pg_upgrade -v \
> -d /usr/local/var/postgres \
> -D /usr/local/var/postgres9.6.1 \
> -b /usr/local/Cellar/postgresql/9.5/bin/ \
> -B /usr/local/Cellar/postgresql/9.6.1/bin/

Quelqu'un a-t-il une idée de ce qui me manque/que je fais mal? Merci!


Système:

  • MacOS 10.12.2
  • PostgreSQL installé avec Homebrew
6
ogirginc

Si la taille de votre base de données n'est pas grande, vous pouvez utiliser pg_dump et pg_dumpall pour prendre la structure de la base de données et le vidage des données sous la forme de requêtes sql à partir de posgtres 9.5 et les restaurer dans postgres 9.6.1.

Si la taille de la base de données est trop grande, optez pour pg_upgrade. En regardant l'erreur, il semble que l'utilisateur ne dispose pas d'autorisations sur le répertoire et ne puisse pas écrire dans le fichier journal. Aussi, pour gagner du temps, je vous suggère d'utiliser -k option de pg_upgrade pour une mise à niveau plus rapide. Notez que -k créera des liens logiciels de vos anciennes données dans le répertoire de données nouvellement installé. Vous ne pourrez donc pas supprimer les anciennes données.

1
Lohit Gupta

Après 9 mois, j'ai mis à jour vers PostgreSQL 10 à partir de 9.6.5 avec pg_upgrade:

1) Arrêtez postgresql:

brew services stop postgresql

2) Initialiser la base de données postgresql10:

initdb /usr/local/var/postgres10.0 -E utf8

3) Vérifiez la base de données nouvellement créée:

ls /usr/local/Cellar/postgresql/

4) Exécutez pq_upgrade pour déplacer les données vers une nouvelle base de données:

pg_upgrade \
  -d /usr/local/var/postgres \
  -D /usr/local/var/postgres10.0 \
  -b /usr/local/Cellar/postgresql/9.6.5/bin/ \
  -B /usr/local/Cellar/postgresql/10.0/bin/ \
  -v

5) Renommer l'ancienne base de données:

mv /usr/local/var/postgres /usr/local/var/postgres9.6.5

6) Renommez la nouvelle base de données en postgres:

mv /usr/local/var/postgres10.0 /usr/local/var/postgres

7) Redémarrez postgresql:

brew services start postgresql

4
ogirginc