Confiabilidade de Migração do Supabase (Produção)
Este runbook é o caminho seguro para migrações em produção do Switchbord.- Ref do projeto Supabase:
jazlpcbhkjtsbxeevesq - Repositório:
switchbord - Fonte de verdade das migrações:
supabase/migrations
1) Verificações de pré-voo
Execute estas verificações antes de qualquer comando de migração em produção.- Confirme que você está no repositório e branch corretos.
- Confirme que o SQL da migração foi revisado e mesclado (merged).
- Confirme que um responsável pelo rollback e um canal de comunicação estão definidos.
- Confirme que a postura de backup/PITR do Supabase está saudável para a janela alvo.
- Execute o script auxiliar não destrutivo:
- presença de chaves de env e possíveis armadilhas de parsing
- status de instalação/login da Supabase CLI
- status de link para este repositório
- snapshots da lista de migrações (linked + local quando disponível)
2) Vincular (link) o projeto de produção
Autentique e vincule esta cópia de trabalho ao projeto de produção:3) Inspecionar o drift de migração
Antes de aplicar novas migrações, inspecione o drift entre os arquivos de migração e o schema de produção.4) Sequência de aplicação segura para produção
Use exatamente esta sequência:- Congele novos merges de migração durante a janela.
- Execute o script de pré-voo e arquive os arquivos de snapshot gerados.
- Execute
supabase db push --linked --dry-run --workdir .e revise a saída. - Aplique as migrações:
- Execute imediatamente a checklist de verificação (seção 6).
5) Caminho de recuperação usando supabase migration repair
Use migration repair apenas para corrigir os metadados do histórico de migração após verificar o estado real do schema.
Ele não aplica nem reverte SQL por si só.
Casos comuns:
- SQL já aplicado, mas o histórico de migração não tem essa versão registrada:
- A migração foi marcada como aplicada, mas a alteração de schema não foi realmente aplicada:
6) Checklist de verificação e orientação de rollback
Checklist de verificação (execute imediatamente após aplicar):supabase migration list --linked --workdir .mostra as versões esperadas aplicadas.supabase db diff --linked --schema public --workdir .não apresenta drift inesperado.- As verificações de saúde do runtime permanecem verdes (
/health,/ready, endpoints críticos). - Os fluxos críticos passam por smoke test (auth, leituras/escritas de inbox, caminho de queue/worker).
- Não há novos erros nos logs para RLS, colunas ausentes ou falhas de cast de enum.
- A estratégia padrão é a correção para frente (forward-fix), não o rollback no local.
- Se a aplicação falhar no meio do caminho, pause os deploys, avalie o estado do schema e use
migration repairpara realinhar os metadados antes de executar o push novamente. - Para erros destrutivos ou impacto de dados irrecuperável, use a restauração de backup/PITR do Supabase para um timestamp conhecido como bom e siga a resposta a incidentes.
- Documente o incidente e os passos exatos de reconciliação antes da próxima janela de migração.
7) Armadilhas conhecidas do Switchbord
-
ALTER TYPE ... ADD VALUEem enum deve ser isolado.- Temos notas explícitas em migrações como:
20260417000002b_outbox_status_enum.sql20260418000001_member_role_billing.sql
- Não combine adições de valor de enum com objetos de schema que dependem imediatamente dos novos valores de enum na mesma migração transacional.
- Temos notas explícitas em migrações como:
-
Armadilhas de parsing de env e de aliases.
- O Switchbord atualmente suporta tanto aliases canônicos quanto legados:
NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEYeNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SECRET_KEYeSUPABASE_SERVICE_ROLE_KEY
- Valores de alias inconsistentes podem causar comportamento inconsistente entre serviços.
- Espaços em branco no final, CRLF ou aspas acidentais em valores de env podem quebrar auth/linking de forma inesperada.
- O Switchbord atualmente suporta tanto aliases canônicos quanto legados:
-
SUPABASE_DB_URLé necessário para operações diretas de Postgres/Vault.- Se estiver ausente, tarefas operacionais adjacentes à migração podem falhar mesmo quando a autenticação via chave de API funciona.