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

  1. Descreve a alteração com os nomes reais das tabelas e colunas.
  2. Indica como publicas (rolling, blue-green, instância única) e que ferramenta de migrações usas.
  3. Ensaia todas as fases em pré-produção antes de mexer em produção.
  4. 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

FaseDeployAvançar quando…
ExpandirNColunas criadas sem erros
Escrita duplaN+1As 4 réplicas escrevem ambas as estruturas
BackfillScript0 linhas pendentes
Leitura novaN+2Consultas de verificação a 0
ContrairN+3Nenhum 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.

Prompts relacionados