Boucle de succès de mise à niveau Postgres due à une migration précédente de Postgres 8 vers 10

Dans une boucle :

Pour finaliser la mise à niveau, reconstruisez à nouveau en utilisant : ./launcher rebuild app

Il doit me manquer quelque chose. Voici le journal complet. Merci pour toute aide.

root@discuss:/var/discourse# ./launcher rebuild app
Vérification que le lanceur est à jour
Récupération de l'origine
Le lanceur est à jour
Arrêt de l'ancien conteneur
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Déjà à jour.
I, [2020-05-26T20:43:00.459915 #1]  INFO -- : Chargement de --stdin
I, [2020-05-26T20:43:00.466076 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2020-05-26T20:43:00.497010 #1]  INFO -- : Génération des paramètres régionaux (cela peut prendre un certain temps)...
Génération terminée.

I, [2020-05-26T20:43:00.497661 #1]  INFO -- : > mkdir -p /shared/postgres_run
I, [2020-05-26T20:43:00.500629 #1]  INFO -- :
I, [2020-05-26T20:43:00.501124 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run
I, [2020-05-26T20:43:00.503417 #1]  INFO -- :
I, [2020-05-26T20:43:00.503867 #1]  INFO -- : > chmod 775 /shared/postgres_run
I, [2020-05-26T20:43:00.505796 #1]  INFO -- :
I, [2020-05-26T20:43:00.506199 #1]  INFO -- : > rm -fr /var/run/postgresql
I, [2020-05-26T20:43:00.508341 #1]  INFO -- :
I, [2020-05-26T20:43:00.508752 #1]  INFO -- : > ln -s /shared/postgres_run /var/run/postgresql
I, [2020-05-26T20:43:00.510785 #1]  INFO -- :
I, [2020-05-26T20:43:00.511166 #1]  INFO -- : > socat /dev/null UNIX-CONNECT:/shared/postgres_run/.s.PGSQL.5432 || exit 0 && echo postgres déjà en cours d'exécution, arrêter le conteneur ; exit 1
2020/05/26 20:43:00 socat[26] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36) : Aucun fichier ou répertoire de ce type
I, [2020-05-26T20:43:00.515245 #1]  INFO -- :
I, [2020-05-26T20:43:00.515542 #1]  INFO -- : > rm -fr /shared/postgres_run/.s*
I, [2020-05-26T20:43:00.518166 #1]  INFO -- :
I, [2020-05-26T20:43:00.518509 #1]  INFO -- : > rm -fr /shared/postgres_run/*.pid
I, [2020-05-26T20:43:00.520876 #1]  INFO -- :
I, [2020-05-26T20:43:00.521215 #1]  INFO -- : > mkdir -p /shared/postgres_run/12-main.pg_stat_tmp
I, [2020-05-26T20:43:00.523438 #1]  INFO -- :
I, [2020-05-26T20:43:00.523931 #1]  INFO -- : > chown postgres:postgres /shared/postgres_run/12-main.pg_stat_tmp
I, [2020-05-26T20:43:00.526034 #1]  INFO -- :
I, [2020-05-26T20:43:00.530519 #1]  INFO -- : Fichier > /etc/service/postgres/run  chmod : +x  chown :
I, [2020-05-26T20:43:00.534602 #1]  INFO -- : Fichier > /etc/service/postgres/log/run  chmod : +x  chown :
I, [2020-05-26T20:43:00.538528 #1]  INFO -- : Fichier > /etc/runit/3.d/99-postgres  chmod : +x  chown :
I, [2020-05-26T20:43:00.542481 #1]  INFO -- : Fichier > /root/upgrade_postgres  chmod : +x  chown :
I, [2020-05-26T20:43:00.542896 #1]  INFO -- : > chown -R root /var/lib/postgresql/12/main
I, [2020-05-26T20:43:00.638174 #1]  INFO -- :
I, [2020-05-26T20:43:00.638520 #1]  INFO -- : > [ ! -e /shared/postgres_data ] && install -d -m 0755 -o postgres -g postgres /shared/postgres_data && sudo -E -u postgres /usr/lib/postgresql/12/bin/initdb -D /shared/postgres_data || exit 0
I, [2020-05-26T20:43:00.640938 #1]  INFO -- :
I, [2020-05-26T20:43:00.641292 #1]  INFO -- : > chown -R postgres:postgres /shared/postgres_data
I, [2020-05-26T20:43:00.672801 #1]  INFO -- :
I, [2020-05-26T20:43:00.673456 #1]  INFO -- : > chown -R postgres:postgres /var/run/postgresql
I, [2020-05-26T20:43:00.676098 #1]  INFO -- :
I, [2020-05-26T20:43:00.676587 #1]  INFO -- : > /root/upgrade_postgres
initdb : avertissement : activation de l'authentification « trust » pour les connexions locales
Vous pouvez modifier cela en éditant pg_hba.conf ou en utilisant l'option -A, ou
--auth-local et --auth-host, la prochaine fois que vous exécuterez initdb.
debconf : report de la configuration du paquet, car apt-utils n'est pas installé
mv : impossible de déplacer « /shared/postgres_data » vers « /shared/postgres_data_old/postgres_data » : Répertoire non vide
mv : impossible de déplacer « /shared/postgres_data_new » vers « /shared/postgres_data/postgres_data_new » : Répertoire non vide
I, [2020-05-26T20:43:15.530374 #1]  INFO -- : Mise à niveau de PostgreSQL de la version 10 vers 12
Les fichiers appartenant à ce système de base de données seront propriété de l'utilisateur « postgres ».
Cet utilisateur doit également être propriétaire du processus serveur.

Le cluster de base de données sera initialisé avec le paramètre régional « en_US.UTF-8 ».
Le codage par défaut de la base de données a été défini en conséquence sur « UTF8 ».
La configuration de recherche textuelle par défaut sera définie sur « english ».

Les sommes de contrôle des pages de données sont désactivées.

Correction des permissions sur le répertoire existant /shared/postgres_data_new ... ok
Création des sous-répertoires ... ok
Sélection de l'implémentation de mémoire partagée dynamique ... posix
Sélection de max_connections par défaut ... 100
Sélection de shared_buffers par défaut ... 128 Mo
Sélection du fuseau horaire par défaut ... Etc/UTC
Création des fichiers de configuration ... ok
Exécution du script de bootstrap ... ok
Exécution de l'initialisation post-bootstrap ... ok
Synchronisation des données sur le disque ... ok


Succès. Vous pouvez maintenant démarrer le serveur de base de données en utilisant :

/usr/lib/postgresql/12/bin/pg_ctl -D /shared/postgres_data_new -l logfile start

Hit:1 http://deb.debian.org/debian buster InRelease
Get:2 http://security.debian.org/debian-security buster/updates InRelease [65,4 ko]
Get:3 http://deb.debian.org/debian buster-updates InRelease [49,3 ko]
Get:4 http://apt.postgresql.org/pub/repos/apt buster-pgdg InRelease [84,6 ko]
Get:5 http://security.debian.org/debian-security buster/updates/main amd64 Packages [201 ko]
Hit:6 https://deb.nodesource.com/node_10.x buster InRelease
Get:7 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 Packages [171 ko]
Récupération de 571 ko en 1 s (810 ko/s)
Lecture de la liste des paquets...
Lecture de la liste des paquets...
Construction de l'arbre des dépendances...
Lecture des informations d'état...
Les paquets supplémentaires suivants seront installés :
  postgresql-client-10
Paquets suggérés :
  postgresql-doc-10
Les paquets NOUVEAUX suivants seront installés :
  postgresql-10 postgresql-client-10
0 mis à jour, 2 nouvellement installés, 0 à supprimer et 9 non mis à jour.
Nécessite de récupérer 6 390 ko d'archives.
Après cette opération, 30,6 Mo d'espace disque supplémentaires seront utilisés.
Get:1 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-client-10 amd64 10.13-1.pgdg100+1 [1 428 ko]
Get:2 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-10 amd64 10.13-1.pgdg100+1 [4 961 ko]
Récupération de 6 390 ko en 2 s (4 017 ko/s)
Sélection du paquet postgresql-client-10 précédemment non sélectionné.
(Lecture de la base de données ... 43929 fichiers et répertoires actuellement installés.)
Préparation du dépaquetage de .../postgresql-client-10_10.13-1.pgdg100+1_amd64.deb ...
Dépaquetage de postgresql-client-10 (10.13-1.pgdg100+1) ...
Sélection du paquet postgresql-10 précédemment non sélectionné.
Préparation du dépaquetage de .../postgresql-10_10.13-1.pgdg100+1_amd64.deb ...
Dépaquetage de postgresql-10 (10.13-1.pgdg100+1) ...
Configuration de postgresql-client-10 (10.13-1.pgdg100+1) ...
update-alternatives : avertissement : forcer la réinstallation de l'alternative /usr/share/postgresql/12/man/man1/psql.1.gz car le groupe de liens psql.1.gz est cassé
Configuration de postgresql-10 (10.13-1.pgdg100+1) ...
Création du nouveau cluster PostgreSQL 10/main ...
/usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/10/main --auth-local peer --auth-host md5
Les fichiers appartenant à ce système de base de données seront propriété de l'utilisateur « postgres ».
Cet utilisateur doit également être propriétaire du processus serveur.

Le cluster de base de données sera initialisé avec le paramètre régional « C.UTF-8 ».
Le codage par défaut de la base de données a été défini en conséquence sur « UTF8 ».
La configuration de recherche textuelle par défaut sera définie sur « english ».

Les sommes de contrôle des pages de données sont désactivées.

Correction des permissions sur le répertoire existant /var/lib/postgresql/10/main ... ok
Création des sous-répertoires ... ok
Sélection de max_connections par défaut ... 100
Sélection de shared_buffers par défaut ... 128 Mo
Sélection du fuseau horaire par défaut ... Etc/UTC
Sélection de l'implémentation de mémoire partagée dynamique ... posix
Création des fichiers de configuration ... ok
Exécution du script de bootstrap ... ok
Exécution de l'initialisation post-bootstrap ... ok
Synchronisation des données sur le disque ... ok

Succès. Vous pouvez maintenant démarrer le serveur de base de données en utilisant :

pg_ctlcluster 10 main start

Avertissement : Le répertoire stats_temp_directory sélectionné /var/run/postgresql/10-main.pg_stat_tmp
n'est pas accessible en écriture pour le propriétaire du cluster. Ce paramètre n'est pas ajouté dans
postgresql.conf.
Ver Cluster Port Statut Propriétaire Répertoire de données              Fichier journal
10  main    5433 arrêté  postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
update-alternatives : avertissement : forcer la réinstallation de l'alternative /usr/share/postgresql/12/man/man1/postmaster.1.gz car le groupe de liens postmaster.1.gz est cassé
invoke-rc.d : impossible de déterminer le niveau d'exécution actuel
invoke-rc.d : policy-rc.d a refusé l'exécution du démarrage.
Traitement des déclencheurs pour postgresql-common (213.pgdg100+1) ...
Construction des dictionnaires PostgreSQL à partir des paquets myspell/hunspell installés...
Suppression des fichiers de dictionnaire obsolètes :
Arrêt du serveur de base de données PostgreSQL 10 : main.
Arrêt du serveur de base de données PostgreSQL 12 : main.
Exécution des vérifications de cohérence
-----------------------------
Vérification des versions des clusters                                   ok
Vérification que l'utilisateur de la base de données est l'utilisateur d'installation                  ok
Vérification des paramètres de connexion à la base de données                       ok
Vérification des transactions préparées                          ok
Vérification des types de données reg* dans les tables utilisateur                 ok
Vérification de contrib/isn avec un décalage de passage bigint       ok
Vérification des tables WITH OIDS                               ok
Vérification des colonnes utilisateur invalides « sql_identifier »          ok
Création d'un dump des objets globaux                             ok
Création d'un dump des schémas de base de données
  discourse
  postgres
  template1
                                                        ok
Vérification de la présence des bibliothèques requises                 ok
Vérification que l'utilisateur de la base de données est l'utilisateur d'installation                  ok
Vérification des transactions préparées                          ok

Si pg_upgrade échoue après ce point, vous devez réinitialiser le
nouveau cluster avant de continuer.

Exécution de la mise à niveau
------------------
Analyse de toutes les lignes dans le nouveau cluster                       ok
Gel de toutes les lignes dans le nouveau cluster                        ok
Suppression des fichiers du nouveau pg_xact                             ok
Copie de l'ancien pg_xact vers le nouveau serveur                           ok
Définition du prochain ID de transaction et de l'époque pour le nouveau cluster       ok
Suppression des fichiers du nouveau pg_multixact/offsets                ok
Copie de l'ancien pg_multixact/offsets vers le nouveau serveur              ok
Suppression des fichiers du nouveau pg_multixact/members                ok
Copie de l'ancien pg_multixact/members vers le nouveau serveur              ok
Définition du prochain ID multixact et du décalage pour le nouveau cluster        ok
Réinitialisation des archives WAL                                      ok
Définition des compteurs frozenxid et minmxid dans le nouveau cluster       ok
Restauration des objets globaux dans le nouveau cluster                 ok
Restauration des schémas de base de données dans le nouveau cluster
  template1
  discourse
  postgres
                                                        ok
Copie des fichiers de relation utilisateur
  /shared/postgres_data/base/16400/2613
  /shared/postgres_data/base/16400/2683
  /shared/postgres_data/base/16400/16728
  /shared/postgres_data/base/16400/16728_fsm
  /shared/postgres_data/base/16400/16728_vm
  /shared/postgres_data/base/16400/16731
  /shared/postgres_data/base/16400/84163
  /shared/postgres_data/base/16400/84163_fsm
  /shared/postgres_data/base/16400/84163_vm
……
                                                        ok
Définition du prochain OID pour le nouveau cluster                            ok
Synchronisation du répertoire de données sur le disque                                 ok
Création du script pour analyser le nouveau cluster                      ok
Création du script pour supprimer l'ancien cluster                       ok

Mise à niveau terminée
----------------
Les statistiques de l'optimiseur ne sont pas transférées par pg_upgrade, donc,
une fois que vous avez démarré le nouveau serveur, envisagez d'exécuter :
./analyze_new_cluster.sh

L'exécution de ce script supprimera les fichiers de données de l'ancien cluster :
./delete_old_cluster.sh
-------------------------------------------------------------------------------------
MISE À NIVEAU DE POSTGRES TERMINÉE

L'ancienne base de données 10 est stockée dans /shared/postgres_data_old

Pour finaliser la mise à niveau, reconstruisez à nouveau en utilisant :

./launcher rebuild app
-------------------------------------------------------------------------------------

Il semble qu’il reste des fichiers datant d’il y a deux ans depuis la dernière mise à niveau :

mv: impossible de déplacer '/shared/postgres_data' vers '/shared/postgres_data_old/postgres_data': Le répertoire n'est pas vide
mv: impossible de déplacer '/shared/postgres_data_new' vers '/shared/postgres_data/postgres_data_new': Le répertoire n'est pas vide

Pouvez-vous déplacer ces fichiers ailleurs avant de reconstruire ?

C’est tout ! Merci, @Falco.

Merci, j’ai ajouté cela à la FAQ. J’ajouterai également la détection de cet état dans le script de mise à niveau.