Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration PostgreSQL Discussion :

Faire un upgrade vers la version 12


Sujet :

Administration PostgreSQL

  1. #1
    Membre extrêmement actif
    Faire un upgrade vers la version 12
    Et bientôt la version 13 ?

    Bonjour à toutes et tous,

    tout est dans le titre.

    J'aimerais upgrader mon serveur Postgres de la version 11 vers la version 12 sans que ça perturbe les accès aux bases de données.

    Comment est-ce que l'on fait ça ?

    Merci d'avance

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  2. #2
    Membre averti
    Voila la méthode que j'utilise depuis un certains nombre d'années et sans problème.
    Elle demande l'arrêt des bases pendant la mise à jour. La durée de l'arrêt dépend de la taille des bases.
    Bien entendu, je fais toujours une sauvegarde avant. Cela ne couvre pas l'installation. La variable nv_nb_version correspond à la version de la nouvelle installation.
    Lister les bases en cours de fonctionnement
    pg_lsclusters
    Arrêt de la base de la nouvelle version de postgresql
    pg_dropcluster nv_nb_version main --stop
    Arrêt de postgresql

    systemctl stop postgresql
    Mise à jour
    pg_upgradecluster -m upgrade an_nb_version main
    Relancer postgresql
    systemctl start postgresql
    Lister les bases en cours de fonctionnement
    pg_lsclusters
    "Les cons, ça ose tout. C'est même à ça qu'on les reconnaît." Michel Audiard - Les tontons flingueurs

  3. #3
    Membre extrêmement actif
    Merci de ta réponse,

    Je suppose que "an_nb_version" représente l'ancienne version ...

    Une question subsidiaire, lors de l'installation de la nouvelle version, quel port indiquer ? Le même que pour la version précédente ? Et l'ancienne version doit être désinstallée une fois l'upgrade effectué ?

    Encore merci

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  4. #4
    Membre averti
    Citation Envoyé par Jon Shannow Voir le message
    Je suppose que "an_nb_version" représente l'ancienne version ...
    en effet
    Citation Envoyé par Jon Shannow Voir le message
    Une question subsidiaire, lors de l'installation de la nouvelle version, quel port indiquer ? Le même que pour la version précédente ? Et l'ancienne version doit être désinstallée une fois l'upgrade effectué ?
    Personnellement, je ne personnalise pas le port, toute mes bases sont dans la base main. Par défaut, quand apt (mes serveurs sont sous Debian ou Ubuntu) installe la nouvelle version, il cré une nouvelle base et lui attribut un nouveau port. D'où sa suppression en début. pg_dropcluster supprime la base. L'option stop lui ordonne de l'arrêter avant. Du coup quand tu migres la base, elle garde sa configuration au niveau des ports. La désinstallation n'est pas en soit obligatoire. Tu peux avoir plusieurs versions de PostgreSQL en fonctionnement. Seul la base doit être de l'un ou l'autre.
    "Les cons, ça ose tout. C'est même à ça qu'on les reconnaît." Michel Audiard - Les tontons flingueurs

  5. #5
    Membre extrêmement actif
    OK,
    Merci pour ces explications,
    Je m'y colle demain.
    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  6. #6
    Rédacteur/Modérateur

    Bonjour,

    Citation Envoyé par Jon Shannow Voir le message
    J'aimerais upgrader mon serveur Postgres de la version 11 vers la version 12 sans que ça perturbe les accès aux bases de données.
    La solution qui vous a été proposée est basée sur pg_upgrade, qui diminue le temps d'indisponibilité par rapport à la méthode classique s'appuyant sur une sauvegarde de l'ancienne version et restauration sur la nouvelle version.
    Mais le temps d'indisponibilité n'est pas nul et dépend pour beaucoup de la volumétrie de l'instance que vous migrez. En effet, les deux versions doivent être coupées pendant la migration des fichiers de données.

    Si vous voulez diminuer drastiquement le temps d'indisponibilité, comme vous voulez passer de la v11 à la v12, vous pouvez utiliser le mécanisme de réplication logique apparu avec la v10.
    Pour ça, vous installez la v12, vous répliquez les bases de la v11 vers la v12 (pendant ce temps, vous pouvez continuer de travailler normalement sur la v11, à la fois en lecture et en écriture), et vous coupez les accès juste le temps de faire la bascule entre v11 et v12.

    Ça nécessite quelques opérations supplémentaires d'administration, mais ça fonctionne très bien.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  7. #7
    Membre extrêmement actif
    Merci de cette seconde solution.

    Pour le moment, je dirais que couper le service ne me gène pas. Mais à l'avenir, cela pourrait être très intéressant.

    Comment fait-on une réplication logique ?

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  8. #8
    Rédacteur/Modérateur

    Il faut au préalable prendre quelques précautions. Par exemple, toutes les tables doivent avoir une clé primaire (mais c'est, bien sûr, toujours le cas ).
    Ensuite, il faut modifier le paramètre WAL_LEVEL du serveur à répliquer, pour le passer à la valeur logical, si ce n'est pas déjà le cas (et redémarrer l'instance pour prendre en compte le changement).

    Ensuite, on recopie la structure de la (ou des) base(s) à répliquer (avec l'option -s de pg_dump pour ne sauvegarder que la structure, sauvegarde qu'on restaure sur le serveur secondaire).
    Après, la réplication logique fonctionne sur un système de publication côté serveur principale et abonnement sur le serveur secondaire. Tout est bien décrit dans la documentation de PostgreSQL et c'est un mécanisme simple à mettre en œuvre.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  9. #9
    Membre extrêmement actif
    Merci de toutes ces explications.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  10. #10
    Membre extrêmement actif
    Citation Envoyé par gabriel21 Voir le message
    Voila la méthode que j'utilise depuis un certains nombre d'années et sans problème...
    Heu, j'ai un souci.

    Je ne trouve pas les commandes pg_lsclusters, pg_dropcluster, systemctl et pg_upgradecluster.

    J'aurais peut-être du préciser que le serveur est sous Windows.

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  11. #11
    Rédacteur/Modérateur

    Effectivement...
    Ces commandes ne sont disponibles que sous Linux, et encore pour les distributions basées sur Debian.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  12. #12
    Membre extrêmement actif
    Merci à vous deux.

    Je vais regarder la réplication logique pour voir.

    Sinon, sous Windows il y a pg_upgrade. Je vais regarder tout ça.

    Encore merci

    JS
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

  13. #13
    Rédacteur/Modérateur

    Il y a une procédure pour pg_upgrade sous Windows décrite dans ce billet blog : https://www.arencambre.com/2014/12/2...-misses-a-lot/
    Pas testé (Postgres, c'est mieux sous Linux ), mais la commande ressemble à celle lancée sous Linux (il manque peut-être les options -p et -P pour indiquer les ports de l'ancienne et de la nouvelle instance).

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  14. #14
    Membre extrêmement actif
    Merci pour ce lien
    Au nom du pèze, du fisc et du St Estephe
    Au nom du fric, on baisse son froc...

###raw>template_hook.ano_emploi###