Éxito de bucle de actualización de Postgres debido a migración previa de Postgres 8 a 10

En un bucle de:

Para completar la actualización, vuelve a compilar usando: ./launcher rebuild app

Debo estar perdiendo algo. El registro completo a continuación. Agradezco cualquier ayuda.

root@discuss:/var/discourse# ./launcher rebuild app
Asegurando que el lanzador esté actualizado
Obteniendo origen
El lanzador está actualizado
Deteniendo el contenedor antiguo
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Ya está actualizado.
I, [2020-05-26T20:43:00.459915 #1]  INFO -- : Cargando --stdin
I, [2020-05-26T20:43:00.466076 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2020-05-26T20:43:00.497010 #1]  INFO -- : Generando configuraciones regionales (esto puede tardar un momento)...
Generación completada.

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 ya se está ejecutando, detén el contenedor ; exit 1
2020/05/26 20:43:00 socat[26] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): No existe el archivo o directorio
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 -- : Archivo > /etc/service/postgres/run  chmod: +x  chown:
I, [2020-05-26T20:43:00.534602 #1]  INFO -- : Archivo > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2020-05-26T20:43:00.538528 #1]  INFO -- : Archivo > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2020-05-26T20:43:00.542481 #1]  INFO -- : Archivo > /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: advertencia: habilitando la autenticación «trust» para conexiones locales
Puedes cambiar esto editando pg_hba.conf o usando la opción -A, o
--auth-local y --auth-host, la próxima vez que ejecutes initdb.
debconf: retrasando la configuración del paquete, ya que apt-utils no está instalado
mv: no se puede mover '/shared/postgres_data' a '/shared/postgres_data_old/postgres_data': El directorio no está vacío
mv: no se puede mover '/shared/postgres_data_new' a '/shared/postgres_data/postgres_data_new': El directorio no está vacío
I, [2020-05-26T20:43:15.530374 #1]  INFO -- : Actualizando PostgreSQL de la versión 10 a la 12
Los archivos que pertenecen a este sistema de base de datos serán propiedad del usuario «postgres».
Este usuario también debe ser el propietario del proceso del servidor.

El clúster de bases de datos se inicializará con la configuración regional «en_US.UTF-8».
La codificación predeterminada de la base de datos se ha establecido en consecuencia como «UTF8».
La configuración predeterminada de búsqueda de texto se establecerá en «inglés».

Las sumas de verificación de las páginas de datos están desactivadas.

corrigiendo permisos en el directorio existente /shared/postgres_data_new ... ok
creando subdirectorios ... ok
seleccionando implementación de memoria compartida dinámica ... posix
seleccionando max_connections predeterminado ... 100
seleccionando shared_buffers predeterminado ... 128MB
seleccionando zona horaria predeterminada ... Etc/UTC
creando archivos de configuración ... ok
ejecutando script de arranque ... ok
realizando inicialización posterior al arranque ... ok
sincronizando datos en el disco ... ok


Éxito. Ahora puedes iniciar el servidor de bases de datos usando:

/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 kB]
Get:3 http://deb.debian.org/debian buster-updates InRelease [49.3 kB]
Get:4 http://apt.postgresql.org/pub/repos/apt buster-pgdg InRelease [84.6 kB]
Get:5 http://security.debian.org/debian-security buster/updates/main amd64 Packages [201 kB]
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 kB]
Se han obtenido 571 kB en 1s (810 kB/s)
Leyendo listas de paquetes...
Leyendo listas de paquetes...
Construyendo árbol de dependencias...
Leyendo información de estado...
Se instalarán los siguientes paquetes adicionales:
  postgresql-client-10
Paquetes sugeridos:
  postgresql-doc-10
Se instalarán los siguientes paquetes NUEVOS:
  postgresql-10 postgresql-client-10
0 actualizados, 2 nuevos para instalar, 0 para eliminar y 9 no actualizados.
Es necesario descargar 6.390 kB de archivos.
Después de esta operación, se utilizarán 30.6 MB adicionales de espacio en el disco.
Get:1 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-client-10 amd64 10.13-1.pgdg100+1 [1.428 kB]
Get:2 http://apt.postgresql.org/pub/repos/apt buster-pgdg/main amd64 postgresql-10 amd64 10.13-1.pgdg100+1 [4.961 kB]
Se han obtenido 6.390 kB en 2s (4.017 kB/s)
Seleccionando el paquete previamente no seleccionado postgresql-client-10.
(Leyendo la base de datos ... 43929 archivos y directorios actualmente instalados.)
Preparando para desempaquetar .../postgresql-client-10_10.13-1.pgdg100+1_amd64.deb ...
Desempaquetando postgresql-client-10 (10.13-1.pgdg100+1) ...
Seleccionando el paquete previamente no seleccionado postgresql-10.
Preparando para desempaquetar .../postgresql-10_10.13-1.pgdg100+1_amd64.deb ...
Desempaquetando postgresql-10 (10.13-1.pgdg100+1) ...
Configurando postgresql-client-10 (10.13-1.pgdg100+1) ...
update-alternatives: advertencia: forzando la reinstalación de la alternativa /usr/share/postgresql/12/man/man1/psql.1.gz porque el grupo de enlaces psql.1.gz está roto
Configurando postgresql-10 (10.13-1.pgdg100+1) ...
Creando nuevo clúster de PostgreSQL 10/main ...
/usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/10/main --auth-local peer --auth-host md5
Los archivos que pertenecen a este sistema de base de datos serán propiedad del usuario «postgres».
Este usuario también debe ser el propietario del proceso del servidor.

El clúster de bases de datos se inicializará con la configuración regional «C.UTF-8».
La codificación predeterminada de la base de datos se ha establecido en consecuencia como «UTF8».
La configuración predeterminada de búsqueda de texto se establecerá en «inglés».

Las sumas de verificación de las páginas de datos están desactivadas.

corrigiendo permisos en el directorio existente /var/lib/postgresql/10/main ... ok
creando subdirectorios ... ok
seleccionando max_connections predeterminado ... 100
seleccionando shared_buffers predeterminado ... 128MB
seleccionando zona horaria predeterminada ... Etc/UTC
seleccionando implementación de memoria compartida dinámica ... posix
creando archivos de configuración ... ok
ejecutando script de arranque ... ok
realizando inicialización posterior al arranque ... ok
sincronizando datos en el disco ... ok

Éxito. Ahora puedes iniciar el servidor de bases de datos usando:

pg_ctlcluster 10 main start

Advertencia: El directorio stats_temp_directory seleccionado /var/run/postgresql/10-main.pg_stat_tmp
no es escribible para el propietario del clúster. No se agregará esta configuración en
postgresql.conf.
Ver Cluster Puerto Estado Propietario Directorio de datos Archivo de registro
10  main    5433 apagado postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
update-alternatives: advertencia: forzando la reinstalación de la alternativa /usr/share/postgresql/12/man/man1/postmaster.1.gz porque el grupo de enlaces postmaster.1.gz está roto
invoke-rc.d: no se pudo determinar el nivel de ejecución actual
invoke-rc.d: policy-rc.d denegó la ejecución de start.
Procesando desencadenantes para postgresql-common (213.pgdg100+1) ...
Construyendo diccionarios de PostgreSQL a partir de los paquetes myspell/hunspell instalados...
Eliminando archivos de diccionario obsoletos:
Deteniendo el servidor de bases de datos PostgreSQL 10: main.
Deteniendo el servidor de bases de datos PostgreSQL 12: main.
Realizando comprobaciones de coherencia
-----------------------------
Comprobando versiones de clústeres                                   ok
Comprobando que el usuario de la base de datos es el usuario de instalación                  ok
Comprobando configuración de conexión de la base de datos                       ok
Comprobando transacciones preparadas                          ok
Comprobando tipos de datos reg* en tablas de usuario                 ok
Comprobando contrib/isn con discrepancia en paso de bigint       ok
Comprobando tablas WITH OIDS                               ok
Comprobando columnas de usuario «sql_identifier» inválidas          ok
Creando volcado de objetos globales                             ok
Creando volcado de esquemas de bases de datos
  discourse
  postgres
  template1
                                                        ok
Comprobando presencia de bibliotecas requeridas                 ok
Comprobando que el usuario de la base de datos es el usuario de instalación                  ok
Comprobando transacciones preparadas                          ok

Si pg_upgrade falla después de este punto, debes reinicializar el
nuevo clúster antes de continuar.

Realizando actualización
------------------
Analizando todas las filas en el nuevo clúster                       ok
Congelando todas las filas en el nuevo clúster                        ok
Eliminando archivos de nuevo pg_xact                             ok
Copiando antiguo pg_xact al nuevo servidor                           ok
Estableciendo siguiente ID de transacción y época para el nuevo clúster       ok
Eliminando archivos de nuevo pg_multixact/offsets                ok
Copiando antiguo pg_multixact/offsets al nuevo servidor              ok
Eliminando archivos de nuevo pg_multixact/members                ok
Copiando antiguo pg_multixact/members al nuevo servidor              ok
Estableciendo siguiente ID multixact y desplazamiento para el nuevo clúster        ok
Restableciendo archivos WAL                                      ok
Estableciendo contadores frozenxid y minmxid en el nuevo clúster       ok
Restaurando objetos globales en el nuevo clúster                 ok
Restaurando esquemas de bases de datos en el nuevo clúster
  template1
  discourse
  postgres
                                                        ok
Copiando archivos de relación de usuario
  /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
Estableciendo siguiente OID para el nuevo clúster                            ok
Sincronizando directorio de datos en el disco                                 ok
Creando script para analizar el nuevo clúster                      ok
Creando script para eliminar el antiguo clúster                       ok

Actualización completada
----------------
Las estadísticas del optimizador no se transfieren por pg_upgrade, por lo que,
una vez que inicies el nuevo servidor, considera ejecutar:
./analyze_new_cluster.sh

Ejecutar este script eliminará los archivos de datos del antiguo clúster:
./delete_old_cluster.sh
-------------------------------------------------------------------------------------
ACTUALIZACIÓN DE POSTGRES COMPLETADA

La antigua base de datos 10 se almacena en /shared/postgres_data_old

Para completar la actualización, vuelve a compilar usando:

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

Parece que quedan algunos archivos de hace 2 años desde la última actualización:

mv: no se puede mover '/shared/postgres_data' a '/shared/postgres_data_old/postgres_data': El directorio no está vacío
mv: no se puede mover '/shared/postgres_data_new' a '/shared/postgres_data/postgres_data_new': El directorio no está vacío

¿Puedes mover esos archivos a otro lugar antes de reconstruir?

¡Eso es todo! Gracias, @Falco.

Gracias, he añadido esto a las Preguntas Frecuentes. También añadiré la detección de este estado al script de actualización.