Dump do Postgres 17 não entra numa imagem 16, e o formato muda o comando
[!NOTE] Resumo Executivo (DEV-2026-050): O restore escolhe pg_restore ou psql pelos cinco primeiros bytes do arquivo. Dump feito no Postgres 17 só restaura em postgres:17-alpine.
🚨 O Desafio Técnico / Contexto
pg_restore respondia unsupported version (1.16) quando a imagem era 16. Arquivo SQL plain no pg_restore, ou dump custom no psql, falhava do mesmo jeito.
💡 Principais Lições Aprendidas & Descobertas
- 💡 migrate-saude-livre-ainativo.sh lê 5 bytes. PGDMP chama pg_restore; o resto vai ao psql.
- 💡 unsupported version (1.16) é dump do PostgreSQL 17. O serviço db precisa de postgres:17-alpine.
- 💡 POSTGRES_PASSWORD no compose não altera cluster já inicializado. A troca é ALTER USER no volume existente.
- 💡 O tar de upload com uma pasta raiz única recebe –strip-components=1. Sem isso o arquivo fica um nível abaixo.
🛠️ Especificação Técnica & Código-Chave
# tools/scripts/migrate-saude-livre-ainativo.sh
[ "$(head -c 5 "$file")" = "PGDMP" ] && pg_restore ... || psql ...
# unsupported version (1.16) → postgres:17-alpine
📈 Impacto no Ecossistema & Valor Prático
O restore passou a detectar formato e versão antes de aplicar o dump no volume.
- Projetos Relacionados:
sio-ecosystem - Registro de Origem:
_data/daily.dev-04.yml
Publicado originalmente como parte do Diário de Desenvolvimento 2026 do ecossistema Artes do Sul & Araguaci.