Sucesso no loop de atualização do Postgres devido à migração anterior do Postgres 8 para 10

Em um loop de:

Para concluir a atualização, reconstrua novamente usando: ./launcher rebuild app

Devo estar esquecendo algo. Log completo abaixo. Agradeço qualquer ajuda.

root@discuss:/var/discourse# ./launcher rebuild app
Garantindo que o launcher está atualizado
Buscando origem
Launcher atualizado
Parando o container antigo
+ /usr/bin/docker stop -t 60 app
app
cd /pups && git pull && /pups/bin/pups --stdin
Já está atualizado.
I, [2020-05-26T20:43:00.459915 #1]  INFO -- : Carregando --stdin
I, [2020-05-26T20:43:00.466076 #1]  INFO -- : > locale-gen $LANG && update-locale
I, [2020-05-26T20:43:00.497010 #1]  INFO -- : Gerando locais (isso pode levar um tempo)...
Geração concluída.

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 já está em execução, pare o container ; exit 1
2020/05/26 20:43:00 socat[26] E connect(6, AF=1 "/shared/postgres_run/.s.PGSQL.5432", 36): Arquivo ou diretório não encontrado
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 -- : Arquivo > /etc/service/postgres/run  chmod: +x  chown:
I, [2020-05-26T20:43:00.534602 #1]  INFO -- : Arquivo > /etc/service/postgres/log/run  chmod: +x  chown:
I, [2020-05-26T20:43:00.538528 #1]  INFO -- : Arquivo > /etc/runit/3.d/99-postgres  chmod: +x  chown:
I, [2020-05-26T20:43:00.542481 #1]  INFO -- : Arquivo > /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: aviso: habilitando autenticação "trust" para conexões locais
Você pode alterar isso editando pg_hba.conf ou usando a opção -A, ou
--auth-local e --auth-host, na próxima vez que executar initdb.
debconf: adiando configuração do pacote, pois apt-utils não está instalado
mv: não é possível mover '/shared/postgres_data' para '/shared/postgres_data_old/postgres_data': Diretório não vazio
mv: não é possível mover '/shared/postgres_data_new' para '/shared/postgres_data/postgres_data_new': Diretório não vazio
I, [2020-05-26T20:43:15.530374 #1]  INFO -- : Atualizando PostgreSQL da versão 10 para 12
Os arquivos pertencentes a este sistema de banco de dados serão de propriedade do usuário "postgres".
Este usuário também deve ser o proprietário do processo do servidor.

O cluster de banco de dados será inicializado com o local "en_US.UTF-8".
A codificação padrão do banco de dados foi definida como "UTF8".
A configuração padrão de busca de texto será definida como "english".

Verificações de soma de verificação de página de dados estão desabilitadas.

corrigindo permissões no diretório existente /shared/postgres_data_new ... ok
criando subdiretórios ... ok
selecionando implementação de memória compartilhada dinâmica ... posix
selecionando max_connections padrão ... 100
selecionando shared_buffers padrão ... 128MB
selecionando fuso horário padrão ... Etc/UTC
criando arquivos de configuração ... ok
executando script de bootstrap ... ok
realizando inicialização pós-bootstrap ... ok
sincronizando dados no disco ... ok


Sucesso. Agora você pode iniciar o servidor de banco de dados 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]
Baixados 571 kB em 1s (810 kB/s)
Lendo listas de pacotes...
Lendo listas de pacotes...
Construindo árvore de dependências...
Lendo informações de estado...
Os seguintes pacotes adicionais serão instalados:
  postgresql-client-10
Pacotes sugeridos:
  postgresql-doc-10
Os seguintes NOVOS pacotes serão instalados:
  postgresql-10 postgresql-client-10
0 atualizados, 2 novos instalados, 0 a remover e 9 não atualizados.
É necessário baixar 6.390 kB de arquivos.
Após esta operação, 30,6 MB de espaço adicional em disco serão utilizados.
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]
Baixados 6.390 kB em 2s (4.017 kB/s)
Selecionando pacote previamente não selecionado postgresql-client-10.
(Lendo o banco de dados ... 43929 arquivos e diretórios atualmente instalados.)
Preparando para desempacotar .../postgresql-client-10_10.13-1.pgdg100+1_amd64.deb ...
Desempacotando postgresql-client-10 (10.13-1.pgdg100+1) ...
Selecionando pacote previamente não selecionado postgresql-10.
Preparando para desempacotar .../postgresql-10_10.13-1.pgdg100+1_amd64.deb ...
Desempacotando postgresql-10 (10.13-1.pgdg100+1) ...
Configurando postgresql-client-10 (10.13-1.pgdg100+1) ...
update-alternatives: aviso: forçando reinstalação da alternativa /usr/share/postgresql/12/man/man1/psql.1.gz porque o grupo de links psql.1.gz está quebrado
Configurando postgresql-10 (10.13-1.pgdg100+1) ...
Criando novo cluster PostgreSQL 10/main ...
/usr/lib/postgresql/10/bin/initdb -D /var/lib/postgresql/10/main --auth-local peer --auth-host md5
Os arquivos pertencentes a este sistema de banco de dados serão de propriedade do usuário "postgres".
Este usuário também deve ser o proprietário do processo do servidor.

O cluster de banco de dados será inicializado com o local "C.UTF-8".
A codificação padrão do banco de dados foi definida como "UTF8".
A configuração padrão de busca de texto será definida como "english".

Verificações de soma de verificação de página de dados estão desabilitadas.

corrigindo permissões no diretório existente /var/lib/postgresql/10/main ... ok
criando subdiretórios ... ok
selecionando max_connections padrão ... 100
selecionando shared_buffers padrão ... 128MB
selecionando fuso horário padrão ... Etc/UTC
selecionando implementação de memória compartilhada dinâmica ... posix
criando arquivos de configuração ... ok
executando script de bootstrap ... ok
realizando inicialização pós-bootstrap ... ok
sincronizando dados no disco ... ok

Sucesso. Agora você pode iniciar o servidor de banco de dados usando:

pg_ctlcluster 10 main start

Aviso: O diretório stats_temp_directory selecionado /var/run/postgresql/10-main.pg_stat_tmp
não é gravável para o proprietário do cluster. Esta configuração não será adicionada em
postgresql.conf.
Ver Cluster Porta Status Owner    Diretório de dados              Arquivo de log
10  main    5433 desligado postgres /var/lib/postgresql/10/main /var/log/postgresql/postgresql-10-main.log
update-alternatives: aviso: forçando reinstalação da alternativa /usr/share/postgresql/12/man/man1/postmaster.1.gz porque o grupo de links postmaster.1.gz está quebrado
invoke-rc.d: não foi possível determinar o nível de execução atual
invoke-rc.d: política-rc.d negou a execução de start.
Processando gatilhos para postgresql-common (213.pgdg100+1) ...
Construindo dicionários PostgreSQL a partir dos pacotes myspell/hunspell instalados...
Removendo arquivos de dicionário obsoletos:
Parando servidor de banco de dados PostgreSQL 10: main.
Parando servidor de banco de dados PostgreSQL 12: main.
Realizando verificações de consistência
-----------------------------
Verificando versões do cluster                                   ok
Verificando se o usuário do banco de dados é o usuário de instalação                  ok
Verificando configurações de conexão do banco de dados                       ok
Verificando transações preparadas                          ok
Verificando tipos de dados reg* em tabelas de usuário                 ok
Verificando contrib/isn com incompatibilidade de passagem de bigint       ok
Verificando tabelas WITH OIDS                               ok
Verificando colunas de usuário inválidas "sql_identifier"          ok
Criando dump de objetos globais                             ok
Criando dump de esquemas de banco de dados
  discourse
  postgres
  template1
                                                        ok
Verificando presença de bibliotecas necessárias                 ok
Verificando se o usuário do banco de dados é o usuário de instalação                  ok
Verificando transações preparadas                          ok

Se pg_upgrade falhar após este ponto, você deve re-inicializar o
novo cluster antes de continuar.

Realizando Atualização
------------------
Analisando todas as linhas no novo cluster                       ok
Congelando todas as linhas no novo cluster                        ok
Excluindo arquivos do novo pg_xact                             ok
Copiando pg_xact antigo para o novo servidor                           ok
Definindo próximo ID de transação e época para o novo cluster       ok
Excluindo arquivos do novo pg_multixact/offsets                ok
Copiando pg_multixact/offsets antigo para o novo servidor              ok
Excluindo arquivos do novo pg_multixact/members                ok
Copiando pg_multixact/members antigo para o novo servidor              ok
Definindo próximo ID multixact e offset para o novo cluster        ok
Redefinindo arquivos WAL                                      ok
Definindo contadores frozenxid e minmxid no novo cluster       ok
Restaurando objetos globais no novo cluster                 ok
Restaurando esquemas de banco de dados no novo cluster
  template1
  discourse
  postgres
                                                        ok
Copiando arquivos de relação de usuário
  /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
Definindo próximo OID para o novo cluster                            ok
Sincronizando diretório de dados no disco                                 ok
Criando script para analisar o novo cluster                      ok
Criando script para excluir o cluster antigo                       ok

Atualização Concluída
----------------
Estatísticas do otimizador não são transferidas pelo pg_upgrade, então,
assim que iniciar o novo servidor, considere executar:
./analyze_new_cluster.sh

Executar este script excluirá os arquivos de dados do cluster antigo:
./delete_old_cluster.sh
-------------------------------------------------------------------------------------
ATUALIZAÇÃO DO POSTGRES CONCLUÍDA

O banco de dados antigo 10 está armazenado em /shared/postgres_data_old

Para concluir a atualização, reconstrua novamente usando:

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

Parece que ainda há alguns arquivos remanescentes de 2 anos atrás desde a última atualização:

mv: não é possível mover '/shared/postgres_data' para '/shared/postgres_data_old/postgres_data': Diretório não vazio
mv: não é possível mover '/shared/postgres_data_new' para '/shared/postgres_data/postgres_data_new': Diretório não vazio

Você pode mover esses arquivos para outro lugar antes de reconstruir?

É isso aí! Obrigado, @Falco.

Obrigado, adicionei isso à FAQ. Também vou adicionar a detecção desse estado no script de atualização.