Faça em etapas. Adicione a coluna como nullable sem default para a mudança ser só de metadados, suba código que escreve nela em todo caminho enquanto ainda tolera nulos, faça backfill em lotes pequenos com pausas para locks e replicação ficarem saudáveis, verifique que não restam nulos, aí adicione a restrição not null (validada separadamente onde houver suporte) e remova o código de fallback. Nunca um único ALTER bloqueante numa tabela desse tamanho.
Por que os entrevistadores perguntam isso
Essa é a migração expand and contract, e ela separa quem já entregou contra tabelas grandes de quem não entregou. Os entrevistadores querem a sequência de múltiplos deploys, consciência de que um ALTER ingênuo pega um lock e reescreve a tabela, lotes para proteger réplicas, e a disciplina de verificar antes de impor. Também sonda se você considera deploys graduais em que código antigo e novo rodam ao mesmo tempo.
Como estruturar sua resposta
- Rejeite a migração bloqueante única explicitamente.
- Exponha a sequência de expandir, backfill e contrair.
- Explique o loteamento e por que ele protege as réplicas.
- Considere código antigo e novo rodando lado a lado.
Exemplo de resposta
A coisa que eu não vou fazer é um único ALTER que adiciona uma coluna not null com default, porque num engine mais antigo aquilo reescreve a tabela inteira sob um lock exclusivo e o serviço fica fora por todo o tempo que aquilo levar. Então eu expando primeiro: adiciono nullable, o que no Postgres moderno é mudança de metadados e efetivamente instantânea. Depois eu subo código que escreve a coluna nova em todo insert e update enquanto ainda tolera nulos na leitura, porque durante um deploy gradual pods antigos e novos estão vivos e eu não posso assumir o contrário. Depois o backfill, em lotes de talvez dez mil linhas indexados pela chave primária com um sleep curto entre eles, observando a defasagem de replicação enquanto roda e desacelerando se a defasagem subir. Quando a contagem de nulos for zero eu adiciono a restrição, e no Postgres eu adicionaria como not valid e validaria separadamente para pegar um lock mais fraco. O último deploy remove o fallback. Cada passo é reversível individualmente.
Vai encarar essa entrevista em breve? O GhostPilot escuta a sua chamada ao vivo, identifica a pergunta no instante em que ela é feita e coloca uma resposta estruturada na sua tela em tempo real. Teste na sua próxima entrevista simulada ou pegue um Session Pass de $29, sem assinatura, para a hora da verdade.
Veja como funcionaPerguntas de acompanhamento que você pode esperar
- Como você faria rollback depois que o backfill começou?
- E se o backfill precisar de lógica de aplicação por linha?
- Como isso seria diferente no MySQL?
Mais perguntas para Engenheiro de Software
Seu entrevistador vai fazer a própria versão desta. Cole a descrição real da vaga no Question Predictor gratuito e receba as 20 perguntas que essa vaga tem mais chance de fazer, com o que cada uma está de fato sondando.
Prever minhas perguntas