Plano de migração de base de dados sem downtime (expand and contract)
Planeia uma alteração de esquema em produção sem interromper o serviço: fases expand, migração e contract, backfill por lotes, verificação e reversão em cada passo. Pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Inclui 5 variáveis personalizáveis e pode copiá-lo gratuitamente com um clique.
Avançado · Código · Pendente de revisão editorial
Prompt
Atua como engenheiro de bases de dados com experiência em migrações em produção sem interrupção do serviço.
A alteração que quero fazer: {{alteracao}}
- Motor e versão: {{motor}}
- Tamanho das tabelas afetadas e carga: {{volume}}
- Como a aplicação é publicada: {{publicacao}}
- Ferramenta de migrações: {{ferramenta}}
Entregáveis:
1. Análise de riscos: que instruções bloqueiam ou reescrevem a tabela neste motor e nesta versão, e quanto tempo podem bloquear com este volume (de forma qualitativa se não houver dados).
2. Um plano por fases com o padrão expand and contract. Para cada fase: SQL exato, alterações no código da aplicação, em que publicação entra e condição para avançar.
- Expand: acrescentar colunas, tabelas ou índices sem partir a versão anterior do código (sem bloqueios longos, índices concorrentes se o motor o permitir).
- Escrita dupla ou sincronização temporária entre a estrutura antiga e a nova.
- Backfill por lotes: script idempotente e retomável, tamanho do lote, pausas e forma de medir o progresso.
- Mudança das leituras para a nova estrutura.
- Contract: remover a estrutura antiga só quando nada a usar.
3. Consultas de verificação que confirmem que os dados antigos e novos coincidem.
4. Um plano de reversão para cada fase e o ponto a partir do qual voltar atrás deixa de ser trivial.
5. O que monitorizar durante a migração (bloqueios, atraso de replicação, latência, erros) e quando parar.
6. Uma lista de verificação final para o dia da alteração.
Restrições:
- Assume que durante alguns minutos vão coexistir duas versões do código, salvo indicação em contrário.
- Não inventes nomes de tabelas nem de colunas: usa os meus ou [PREENCHER].
- Se faltar informação crítica (por exemplo réplicas ou chaves estrangeiras), pergunta-me primeiro.
- Recomenda ensaiar o plano completo em pré-produção com uma cópia realista dos dados.Como utilizar
- Descreve a alteração com os nomes reais das tabelas e colunas.
- Indica como publicas (rolling, blue-green, instância única) e que ferramenta de migrações usas.
- Ensaia todas as fases em pré-produção antes de mexer em produção.
- Junta o plano ao pedido de alteração para teres a reversão à mão.
Exemplo de utilização
Alteração: dividir clientes.nome_completo em nome e apelido · PostgreSQL 15 · 8 milhões de linhas · Publicação rolling em Kubernetes · Alembic.
Exemplo de resultado
1. Risco
No PostgreSQL 15, ADD COLUMN sem valor por omissão só mexe no catálogo, mas precisa de um lock ACCESS EXCLUSIVE breve: se houver uma consulta longa à frente, todas as escritas ficam em fila. Por isso usamos lock_timeout.
2. Plano por fases
| Fase | Deploy | Avançar quando… |
|---|---|---|
| Expandir | N | Colunas criadas sem erros |
| Escrita dupla | N+1 | As 4 réplicas escrevem ambas as estruturas |
| Backfill | Script | 0 linhas pendentes |
| Leitura nova | N+2 | Consultas de verificação a 0 |
| Contrair | N+3 | Nenhum código lê nome_completo |
-- Fase 1: expandir (falhar depressa em vez de bloquear a tabela)
SET lock_timeout = '2s';
ALTER TABLE clientes
ADD COLUMN nome text,
ADD COLUMN apelido text;
-- Fase 3: backfill por lotes, idempotente e retomável por id
UPDATE clientes
SET nome = split_part(nome_completo, ' ', 1),
apelido = NULLIF(substr(nome_completo,
length(split_part(nome_completo, ' ', 1)) + 2), '')
WHERE id > :ultimo_id AND id <= :ultimo_id + 5000
AND nome IS NULL;
Atenção: a regra de divisão é [COMPLETAR]. Cortar no primeiro espaço falha com nomes compostos («Ana Rita») ou vários apelidos; revê uma amostra antes de correr o backfill…
Dados-chave
- Categoria
- Programação e desenvolvimento · SQL
- Tipo de resultado
- Código
- Nível
- Avançado
- Pensado para
- ChatGPT, Claude, Gemini e Microsoft Copilot
- Verificado em
- Pendente de verificação editorial
- Variáveis
- Alteração de esquema, Motor e versão, Volume e carga, Forma de publicação e Ferramenta de migrações
- Idioma
- Português
- Preço
- Gratuito, sem registo
- Atualizado
- 07/11/2026
Perguntas frequentes
O que é o padrão expand and contract?
Transforma uma alteração incompatível em vários passos compatíveis: acrescentas o novo sem tirar o antigo, migras dados e leituras e só no fim removes o antigo. Assim cada publicação funciona com a versão anterior do código.
Porquê fazer o backfill por lotes e não com um único UPDATE?
Um UPDATE massivo pode manter bloqueios durante muito tempo, gerar muito registo e atrasar as réplicas. Lotes pequenos e retomáveis reduzem o impacto e permitem parar se algo correr mal.
Para que serve este prompt?
Planeia uma alteração de esquema em produção sem interromper o serviço: fases expand, migração e contract, backfill por lotes, verificação e reversão em cada passo.
Com que ferramentas de IA funciona?
Foi pensado para ChatGPT, Claude, Gemini e Microsoft Copilot. Ainda não o verificámos nestas ferramentas, pelo que os resultados podem variar entre elas.
Como personalizo o prompt?
Clique em “Personalizar” e preencha as variáveis (Alteração de esquema, Motor e versão, Volume e carga, Forma de publicação e Ferramenta de migrações). O texto atualiza-se instantaneamente e pode depois copiá-lo com um clique. Os valores ficam guardados apenas no seu navegador.
Preciso de experiência para o utilizar?
É de nível avançado: destina-se a pessoas com experiência no tema, capazes de avaliar e ajustar o resultado.
Este prompt é gratuito?
Sim. Todos os prompts do HomeCasa Prompts são gratuitos, sem registo nem subscrição. Pode também utilizá-los em projetos profissionais.
Posso confiar no resultado da IA?
Trate-o como um rascunho de qualidade: verifique sempre os dados, os números e as afirmações importantes antes de publicar ou tomar decisões.