Comment mettre à niveau PostgreSQL de la version 9.6 vers la version 10.1 sans perdre de données?

J’utilise la firebase database PostgreSQL pour mon application Ruby on Rails (sur Mac OS X 10.9).

Existe-t-il des instructions détaillées sur la mise à niveau de la firebase database PostgreSQL?

J’ai peur de détruire les données de la firebase database ou de les gâcher.

En supposant que vous ayez utilisé la préparation à la maison pour installer et mettre à niveau Postgres, vous pouvez effectuer les étapes suivantes.

  1. Arrêtez le serveur Postgres actuel:

    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  2. Initialiser une nouvelle firebase database 10.1:

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

  3. lancez pg_upgrade (note: modifiez la version de bin si vous effectuez une mise à niveau à partir de quelque chose d’autre que ci-dessous) :

     pg_upgrade -v \ -d /usr/local/var/postgres \ -D /usr/local/var/postgres10.1 \ -b /usr/local/Cellar/postgresql/9.6.5/bin/ \ -B /usr/local/Cellar/postgresql/10.1/bin/ 
  4. Déplacer les nouvelles données en place:

     cd /usr/local/var mv postgres postgres9.6 mv postgres10.1 postgres 
  5. Redémarrer Postgres:

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  6. Vérifiez /usr/local/var/postgres/server.log pour plus de détails et pour vous assurer que le nouveau serveur a démarré correctement.

  7. Enfin, réinstallez les rails pg gem

     gem uninstall pg gem install pg 

Je vous suggère de prendre le temps de lire la documentation de PostgreSQL pour comprendre exactement ce que vous faites dans les étapes ci-dessus afin de minimiser les frustrations.

Voici la solution pour les utilisateurs d’Ubuntu

Nous devons d’abord arrêter postgresql

 sudo /etc/init.d/postgresql stop 

Créez un nouveau fichier appelé /etc/apt/sources.list.d/pgdg.list et ajoutez la ligne ci-dessous

 deb http://apt.postgresql.org/pub/repos/apt/ utopic-pgdg main 

Suivez les commandes ci-dessous

 wget -q -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt-get update sudo apt-get install postgresql-9.4 sudo pg_dropcluster --stop 9.4 main sudo /etc/init.d/postgresql start 

Maintenant, nous avons tout, il suffit de le mettre à niveau comme ci-dessous

 sudo pg_upgradecluster 9.3 main sudo pg_dropcluster 9.3 main 

C’est tout. Le cluster le plus souvent mis à niveau fonctionnera sur le numéro de port 5433. Vérifiez-le avec la commande ci-dessous

 sudo pg_lsclusters 

Malgré toutes les réponses ci-dessus, voici mes 5 cents.

Il fonctionne sur n’importe quel système d’exploitation et depuis n’importe quelle version postgres.

  • Arrêtez toute instance de postgres en cours d’exécution;
  • Installez la nouvelle version et démarrez-la; Vérifiez si vous pouvez également vous connecter à la nouvelle version.
  • Modifier le port postgresql.conf -> de l’ancienne version de 5432 à 5433 ;
  • Lancer l’ancienne version postgres instance;
  • Ouvrez un terminal et un CD dans le nouveau dossier bin version.
  • Exécuter pg_dumpall -p 5433 -U | psql -p 5432 -U pg_dumpall -p 5433 -U | psql -p 5432 -U
  • Arrêtez l’ancienne instance d’exécution de postgres;

Le manuel d’utilisation couvre ce sujet en profondeur. Vous pouvez:

  • pg_upgrade en place; ou

  • pg_dump et pg_restore .

En cas de doute, faites-le avec des décharges. Ne supprimez pas l’ancien répertoire de données, conservez-le juste au cas où quelque chose ne va pas / vous commettez une erreur; De cette façon, vous pouvez simplement revenir à votre installation 9.3 non modifiée.

Pour plus de détails, voir le manuel.

Si vous êtes bloqué, postez une question détaillée expliquant comment vous êtes coincé, où et ce que vous avez essayé en premier. Cela dépend un peu de la façon dont vous avez installé PostgreSQL, car il existe plusieurs “dissortingbutions” de PostgreSQL pour OS X (malheureusement). Vous devez donc fournir ces informations.

Debout sur les épaules des autres pauvres créatures en train de traverser cette boue, j’ai pu suivre ces étapes pour me remettre en marche après une mise à niveau vers Yosemite:

En supposant que vous ayez utilisé la préparation à la maison pour installer et mettre à niveau Postgres, vous pouvez effectuer les étapes suivantes.

  1. Arrêtez le serveur Postgres actuel:

    launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  2. Initialiser une nouvelle firebase database 9.4:

    initdb /usr/local/var/postgres9.4 -E utf8

  3. Installez postgres 9.3 (comme il n’était plus présent sur ma machine):

    brew install homebrew/versions/postgresql93

  4. Ajoutez des répertoires supprimés lors de la mise à niveau de Yosemite:

    mkdir -p /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/touch /usr/local/var/postgres/{pg_tblspc,pg_twophase,pg_stat_tmp}/.keep

  5. lancez pg_upgrade :

    pg_upgrade -v -d /usr/local/var/postgres -D /usr/local/var/postgres9.4 -b /usr/local/Cellar/postgresql93/9.3.5/bin/ -B /usr/local/Cellar/postgresql/9.4.0/bin/

  6. Déplacer les nouvelles données en place:

     cd /usr/local/var mv postgres postgres9.3 mv postgres9.4 postgres 
  7. Redémarrer Postgres:

    launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

  8. Vérifiez /usr/local/var/postgres/server.log pour plus de détails et pour vous assurer que le nouveau serveur a démarré correctement.

  9. Enfin, réinstallez les bibliothèques associées?

     pip install --upgrade psycopg2 gem uninstall pg gem install pg 

Mise à jour : ce processus est identique pour la mise à niveau 9.6 à 10; modifiez simplement les commandes pour refléter les versions 9.6 et 10 , où 9.6 est l’ ancienne version et 10 la nouvelle version. Veillez également à ajuster les “anciens” et les “nouveaux” répertoires en conséquence.


Je viens de mettre à jour PostgreSQL 9.5 vers 9.6 sur Ubuntu et je pensais partager mes découvertes, car il existe quelques nuances spécifiques à un système d’exploitation / package.

( Je ne voulais pas avoir à vider et restaurer des données manuellement , donc plusieurs autres réponses n’étaient pas viables.)

En bref, le processus consiste à installer la nouvelle version de PostgreSQL à côté de l’ancienne version (par exemple, 9.5 et 9.6), puis à exécuter le binary pg_upgrade , qui est expliqué (en détail) à l’ adresse https://www.postgresql.org. /docs/9.6/static/pgupgrade.html .

Le seul aspect “délicat” de pg_upgrade est que l’impossibilité de transmettre la valeur correcte d’un argument ou l’échec de la connexion en tant qu’utilisateur ou cd correct au bon emplacement avant d’exécuter une commande peut entraîner des messages d’erreur cryptés.

Sur Ubuntu (et probablement sur Debian), à condition que vous utilisiez le deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main “officiel”, deb http://apt.postgresql.org/pub/repos/apt/ xenial-pgdg main , et à condition que vous n’ayez pas modifié le système de fichiers par défaut les chemins ou les options d’exécution, la procédure suivante devrait faire le travail.

Installez la nouvelle version (notez que nous spécifions le 9.6 , explicitement):

 sudo apt install postgresql-9.6 

Une fois l’installation réussie, les deux versions seront exécutées côte à côte, mais sur des ports différents. La sortie de l’installation mentionne ceci, en bas, mais il est facile de négliger:

 Creating new cluster 9.6/main ... config /etc/postgresql/9.6/main data /var/lib/postgresql/9.6/main locale en_US.UTF-8 socket /var/run/postgresql port 5433 

Arrêtez les deux instances de serveur (cela s’arrêtera les deux en même temps):

 sudo systemctl stop postgresql 

Basculez vers l’utilisateur système dédié PostgreSQL:

 su postgres 

Déplacez-vous dans son répertoire personnel (si vous ne le faites pas, cela entraînera des erreurs):

 cd ~ 

pg_upgrade nécessite les entrées suivantes ( pg_upgrade --help nous dit ceci):

 When you run pg_upgrade, you must provide the following information: the data directory for the old cluster (-d DATADIR) the data directory for the new cluster (-D DATADIR) the "bin" directory for the old version (-b BINDIR) the "bin" directory for the new version (-B BINDIR) 

Ces entrées peuvent être spécifiées avec des “noms longs”, pour faciliter leur visualisation:

  -b, --old-bindir=BINDIR old cluster executable directory -B, --new-bindir=BINDIR new cluster executable directory -d, --old-datadir=DATADIR old cluster data directory -D, --new-datadir=DATADIR new cluster data directory 

Nous devons également passer le commutateur --new-options , car cela échoue:

 connection to database failed: could not connect to server: No such file or directory Is the server running locally and accepting connections on Unix domain socket "/var/lib/postgresql/.s.PGSQL.50432"? 

Cela se produit car les options de configuration par défaut sont appliquées en l’absence de ce commutateur, ce qui entraîne l’utilisation d’options de connexion incorrectes, d’où l’erreur de socket.

Exécutez la commande pg_upgrade partir de la nouvelle version de PostgreSQL:

 /usr/lib/postgresql/9.6/bin/pg_upgrade --old-bindir=/usr/lib/postgresql/9.5/bin --new-bindir=/usr/lib/postgresql/9.6/bin --old-datadir=/var/lib/postgresql/9.5/main --new-datadir=/var/lib/postgresql/9.6/main --old-options=-cconfig_file=/etc/postgresql/9.5/main/postgresql.conf --new-options=-cconfig_file=/etc/postgresql/9.6/main/postgresql.conf 

Déconnexion du compte utilisateur système dédié:

 exit 

La mise à niveau est maintenant terminée, mais la nouvelle instance se liera au port 5433 (la valeur par défaut est 5432 ). Gardez cela à l’esprit si vous tentez de tester la nouvelle instance avant de la “couper”.

Démarrez le serveur normalement (encore une fois, cela démarrera les anciennes et les nouvelles instances):

 systemctl start postgresql 

Si vous voulez faire de la nouvelle version la valeur par défaut, vous devrez éditer le fichier de configuration effectif, par exemple /etc/postgresql/9.6/main/postgresql.conf , et vous assurer que le port est défini en tant que tel:

 port = 5432 

Si vous faites cela, changez le numéro de port de l’ancienne version en 5433 en même temps (avant de démarrer les services), ou supprimez simplement l’ancienne version (cela ne supprimera pas le contenu réel de la firebase database; apt --purge remove postgresql-9.5 pour que cela se produise):

 apt remove postgresql-9.5 

La commande ci-dessus arrête toutes les instances, vous devrez donc lancer la nouvelle instance une dernière fois avec:

 systemctl start postgresql 

Enfin, n’oubliez pas de prendre en compte les bons conseils de pg_upgrade :

 Upgrade Complete ---------------- Optimizer statistics are not transferred by pg_upgrade so, once you start the new server, consider running: ./analyze_new_cluster.sh Running this script will delete the old cluster's data files: ./delete_old_cluster.sh 

Si vous utilisez des services homebrew et homebrew, vous pouvez probablement faire:

 brew services stop postgresql brew upgrade postgresql brew postgresql-upgrade-database brew services start postgresql 

Je pense que cela pourrait ne pas fonctionner complètement si vous utilisez des fonctionnalités avancées de postgres, mais cela a parfaitement fonctionné pour moi.

On dirait que la solution a été intégrée à Homebrew maintenant:

 $ brew info postgresql ... ==> Caveats To migrate existing data from a previous major version of PostgreSQL run: brew postgresql-upgrade-database .... 

Cela l’a fait pour moi.

https://gist.github.com/dideler/60c9ce184198666e5ab4

Bref et au point. Honnêtement, je ne cherche pas à comprendre les sortingpes de PostgreSQL, je veux que les choses soient faites.

Sous Windows, j’ai continué à faire face à différents messages d’erreur lorsque j’essayais d’utiliser pg_upgrade .

J’ai économisé beaucoup de temps pour juste:

  1. DB de sauvegarde
  2. Désinstallez toutes les copies de PostgreSQL
  3. Installer 9.5
  4. Restaurer la firebase database

Ma solution consistait à combiner ces deux ressources:

https://gist.github.com/tamoyal/2ea1fcdf99c819b4e07d

et

http://www.gab.lc/articles/migration_postgresql_9-3_to_9-4

Le second a aidé plus que le premier. De plus, ne suivez pas les étapes car certaines ne sont pas nécessaires. De plus, si vous ne pouvez pas sauvegarder les données via la console postgres, vous pouvez utiliser une approche alternative et la sauvegarder avec pgAdmin 3 ou un autre programme, comme je l’ai fait dans mon cas.

En outre, le lien https://help.ubuntu.com/stable/serverguide/postgresql.html Aider à définir le mot de passe crypté et à définir md5 pour l’authentification de l’utilisateur postgres.

Après tout, pour vérifier la version du server postgres exécutée dans le terminal:

 sudo -u postgres psql postgres 

Après avoir saisi le mot de passe, exécutez le terminal postgres:

 SHOW SERVER_VERSION; 

Il va sortir quelque chose comme:

  server_version ---------------- 9.4.5 

Pour définir et démarrer postgres j’ai utilisé la commande:

 > sudo bash # root > su postgres # postgres > /etc/init.d/postgresql start > /etc/init.d/postgresql stop 

Et puis pour restaurer la firebase database à partir d’un fichier:

 > psql -f /home/ubuntu_username/Backup_93.sql postgres 

Ou si ça ne marche pas, essayez avec celui-ci:

 > pg_restore --verbose --clean --no-acl --no-owner -h localhost -U postgres -d name_of_database ~/your_file.dump 

Et si vous utilisez Rails, faites un bundle exec rake db:migrate après avoir extrait le code 🙂

Je pense que c’est le meilleur lien pour votre solution pour mettre à jour postgres à 9.6

 https://sandymadaan.wordpress.com/2017/02/21/upgrade-postgresql9-3-9-6-in-ubuntu-retaining-the-databases/ 

Pour Mac via homebrew:

brew tap petere/postgresql ,

brew install (ex: brew install petere/postgresql/postgresql-9.6 )

Supprimer les anciens Postgres:

brew unlink postgresql

brew link -f postgresql-9.6

Si une erreur survient, n’oubliez pas de lire et de suivre les instructions de préparation à chaque étape.

Découvrez-en plus: https://github.com/petere/homebrew-postgresql