usar pg_upgrade quando você instalou a versão 'antiga' e a versão 'nova' em um sistema é bem direto. Eu tentei encontrar uma maneira de usar pg_upgrade com contêineres docker. Isso é um pouco mais complicado porque você precisa do 'antigo datadir', do 'antigo bindir' e do 'novo datadir' e do 'novo bindir' da versão 'antiga' e da 'nova' do postgres que você quer atualizar e atualizar para. Como os 'diretórios antigos' não estão presentes no contêiner docker da versão 'nova', você tem que montá-los no contêiner 'novo'.
Mas como o pg_upgrade parece esperar não apenas o bindir e o datadir 'antigos', mas também as bibliotecas 'antigas' (das quais o postgres depende) da versão mais antiga, você também precisa montá-las no contêiner da nova versão.
Então acabei executando um 'old-version-container', copiando o bindir, datadir e lib dir para o host docker local e montando-os no 'new-version-container'
ao vir do postgres-12, isso significa copiar o conteúdo de /usr/lib/ para o host docker local e remontá-lo para o 'new-version-container'
então montei o 'old-libdir' em /12-bindir/ e fiz
ldd /12-bindir/postgres
para descobrir de quais libs o postgres depende. Depois de copiar o 'old-libs' para /usr/lib no 'new-version-container' todas as dependências puderam ser encontradas e eu consegui usar o pg_upgrade e realmente atualizar um banco de dados de (ou seja, postgres-12-alpine para postgres:15.10-bookworm)
então... funcionou... Então... a verdadeira questão é: porque funciona... devo fazer assim ou estou esquecendo de algo e fazendo algo estúpido ou bobo? Fico feliz com cada dica e opinião