PostgreSQL 12 para 15 funciona direto sem passar por versões intermediárias, então pg_upgrade é teu caminho. O que realmente importa aqui é que antes de rodar pg_upgrade, você precisa fazer um backup completo com pg_dump ou um backup físico - não para a migração em si, mas como rede de segurança. Muita gente pula esse passo porque confia que pg_upgrade vai funcionar, mas se algo der errado com 50GB de dados, você não quer estar rezando.
O processo é bem direto: você instala PostgreSQL 15 no mesmo servidor (ou em um paralelo se preferir), pausa as escritas no BD, roda pg_upgrade com a flag `-k` para manter os arquivos antigos como respaldo, e deixa rodar. Com 50GB talvez demore 5-15 minutos dependendo do hardware, mas depois você tem tudo convertido in-place sem exportar/importar nada. Uma vez que você confirma que está tudo funcionando bem, só aí você deleta os arquivos antigos da versão 12.
O importante que você não vê mencionado é verificar as extensões e configurações customizadas. Se você tem extensões instaladas, pg_upgrade pode ter problemas - você precisa que elas existam em PostgreSQL 15 também. Antes de fazer qualquer coisa, confira `SELECT extname FROM pg_extension;` no seu BD atual e confirme que todas essas extensões suportam a versão 15. É aí que mais cosuma falhar, não na migração de dados em si.