Pular para o conteúdo

Backups

Branching do Supabase não é backup. Ele só anda para a frente.

Por que o branching do Supabase não é backup: um branch começa sem os seus dados e um merge só leva o esquema. Para que ele serve e o que usar no lugar.

Vlad Tkachenko8 min de leitura
Uma linha de dados que segue em frente, com uma segunda linha que se separa e leva ao lado um banco de dados vazio.

Em resumo

  • Branching do Supabase não é backup. Um branch é um segundo banco de dados para testar mudanças, e ele começa sem nenhum dos seus dados de produção.
  • Um merge aplica as suas mudanças de esquema na produção. Ele nunca leva linhas, e não existe nenhuma operação que devolva uma versão anterior dos seus dados.
  • Mesmo um branch em que você clonou seus dados fica dentro da mesma conta, e um branch de preview é apagado quando o pull request dele fecha.

Você ligou o branching do Supabase porque parecia o jeito caprichado de trabalhar. Agora existe um branch de preview ao lado do seu projeto, as mudanças são testadas ali antes de alguém ver, e a coisa toda parece bem mais segura do que no mês passado.

E é mais segura mesmo. Só que não é backup, e a diferença aparece em exatamente um dia.

Aqui está a parte que os guias de branching pulam: um branch é um segundo banco de dados ao lado do primeiro, e não uma versão anterior dele. O branching é o lugar aonde você vai antes de fazer uma mudança. Um backup é o lugar aonde você vai depois que alguma coisa já deu errado. Ligar o branching não deixa uma cópia dos seus dados em lugar nenhum.

O branching do Supabase é um backup?

Não. Um branch começa como um banco vazio vestido com o seu esquema, e nada no branching devolve uma versão anterior dos seus dados.

A própria documentação do Supabase é direta: "Branches novos não começam com nenhum dado do seu projeto principal. Isso serve para proteger melhor os seus dados sensíveis de produção". Um branch é construído a partir das suas migrações, e uma migração descreve o formato de um banco de dados. As tabelas, as colunas, as policies. Nunca as linhas.

Então o branch que está ao lado do seu projeto não é a cópia de terça. É um banco novo que nunca viu os seus usuários.

Um branch do SupabaseUm backup
Guarda suas linhas de um momento anteriorSó se você clonou elas para dentroSim, esse é o trabalho inteiro
Consegue devolver a produção ao que eraNuncaSim
Fica fora da sua conta do SupabaseNão, é outro projeto dentro delaDepende de qual dos três caminhos você pegou
Ainda vai estar lá no mês que vemSó se você deixou ele persistenteEnquanto você guardar
Para que serveTestar uma mudança antes que ela alcance alguémVoltar para antes de algo alcançar alguém

Se você nunca estabeleceu o que realmente está copiando o seu banco, essa é justamente a tarefa para a qual este artigo quer te mandar, e o seu plano resolve quase tudo em dois minutos.

O que um branch é de verdade

Um segundo projeto Supabase inteiro, com tudo dele próprio.

"Cada branch é um ambiente separado com a própria instância do Supabase e as próprias credenciais de API", é assim que a documentação coloca. String de conexão própria, chaves próprias, Storage próprio, contas de login próprias, linhas próprias. Nada lá dentro está ligado ao projeto em que os seus usuários estão, e é exatamente isso que torna seguro quebrar coisas ali.

Esse isolamento é a funcionalidade inteira, e é também por isso que ele não consegue servir de backup. A cópia dos seus dados que você esperava nunca foi tirada, e o lugar onde você iria procurar por ela está vazio desde o dia em que foi criado.

O que um merge faz, e o que ele não faz

Ele leva as suas mudanças de esquema para a produção. Ele nunca leva linhas, em nenhuma direção, em nenhum momento.

Quando você faz merge, o Supabase aplica as migrações do seu branch no seu banco de produção e publica as suas mudanças de Edge Functions. Essa é a carga inteira. Uma tabela nova, uma coluna nova, uma policy reescrita: essas viajam. As linhas que você criou testando ficam no branch, e as linhas da produção ficam exatamente como estavam, inclusive aquelas que você esperava substituir.

Um merge publica o formato do seu banco e o código em volta dele. As linhas são a única coisa que ele nunca foi feito para mover.

As pessoas esperam uma versão disso que não existe: um merge que entra na produção e coloca as coisas de volta como estavam. O que o branching tem no lugar é um deploy, aplicado para a frente, em cima do que estiver na produção naquele momento.

Mas eu cloneei meus dados de produção para o branch

Então você tem uma cópia das suas linhas, e três coisas sobre essa cópia decidem quanto ela vale no dia em que você precisar dela.

Dá para fazer isso e não é nada obscuro. A CLI do Supabase descreve a opção como clonar os dados de produção para o banco do branch, e a API de management aceita a mesma opção quando cria um branch. Se você usou, o seu branch guarda os seus dados mesmo.

  • Ela foi tirada uma vez. O clone acontece na criação do branch e nada completa ele depois. Cada pedido, cada cadastro e cada comentário desde então vive na produção e em nenhum outro lugar, e é toda essa a diferença entre uma cópia e um calendário.
  • Ela está dentro da mesma conta. Um branch é outro projeto sob a mesma organização, no mesmo cartão, atrás do mesmo login. Todo jeito de perder a sua conta do Supabase leva o branch junto, e esse é um desastre diferente de estragar os próprios dados.
  • Ninguém leu ela de volta. Um clone que parou no meio é idêntico por fora a um que terminou, até o momento em que você abre.

O branch é a parte feita para desaparecer

Um branch de preview é apagado quando o pull request dele é mergeado ou fechado. Esse é o comportamento documentado do recurso.

O Supabase chama os branches de preview de "efêmeros e mais adequados a testes focados" e diz que eles "são apagados automaticamente quando um PR é mergeado ou fechado". O outro tipo, os branches persistentes, são "de vida longa e recomendados para ambientes como staging, QA ou desenvolvimento", e esses sobrevivem ao fechamento do pull request.

Um backup fica atrás de você na linha do tempo, num momento que você consegue nomear. Um branch corre ao seu lado, e atrás dele não há nada para alcançar.

Então, no ajuste padrão, o branch que guarda a sua única cópia clonada é justamente o que o seu fluxo de trabalho joga fora no dia em que o trabalho termina. Mantê-lo significa deixá-lo persistente, e um branch persistente é um segundo projeto Supabase ligado. O Supabase oferece branching nos planos pagos e cobra por branch e por hora, na página de preços deles.

Para que o branching serve de verdade

Para bastante coisa, e este artigo seria desonesto se não dissesse isso.

Um branch é o lugar mais barato que existe para descobrir que uma migração apaga uma coluna, antes que ela apague a coluna em que os seus clientes estão sentados. Ele deixa você ensaiar uma mudança de policy contra um banco com o mesmo formato do seu, com chaves próprias, de modo que um erro não alcança ninguém. Ele dá a uma IA um lugar para estar errada que não é o seu app em produção. Um backup não faz nada disso.

O buraco está em que tipo de acidente ele cobre. O branching protege as mudanças que passam por um pull request. A maior parte do que de fato custa os dados das pessoas nunca chega perto de um: um delete no editor de tabelas do Supabase que pegou mais linhas do que a intenção, um script de seed apontado para o projeto de produção, uma migração que uma IA escreveu e você aprovou à uma da manhã, uma faxina no que parecia dado de teste. Nenhum desses passa por um branch a caminho da produção, que é o mesmo motivo pelo qual voltar o código não traz de volta uma tabela apagada.

Esse segundo tipo de acidente é o que um backup responde. Ele fica atrás de você no tempo, guardando o estado do seu banco num momento que você consegue nomear, para que um erro cometido fora do seu fluxo de trabalho ainda tenha para onde voltar.

É isso também que o Reeve Care é: cópias programadas do seu banco de dados Supabase, guardadas fora da sua conta do Supabase, lidas de volta e conferidas antes de qualquer uma contar como feita. Conecte seus buckets de Storage e os arquivos que os seus usuários subiram vão junto, então uma restauração devolve as linhas e as imagens para as quais essas linhas apontam.

Deixe o branching ligado de qualquer jeito. Nada acima é argumento para desligá-lo.

O que fazer esta semana

O que fazer

  • Descubra o que está copiando o seu banco de dados num calendário, separado de qualquer coisa que faça branch dele. Se estabelecer isso levar mais de um minuto, a resposta é que nada está.
  • Se você vinha tratando um branch clonado como a sua rede de segurança, anote a data em que ele foi criado e a data em que o pull request dele fecha. Esses são os dois extremos do que ele cobre.
  • Ligue o backup que o seu plano do Supabase inclui. É a coisa mais barata desta lista e cobre o desastre comum, que é você ter estragado os próprios dados.
  • Guarde uma cópia fora da sua conta do Supabase, porque um branch e um backup da plataforma estão os dois atrás do mesmo login que a coisa que eles protegem.
  • Restaure uma cópia num projeto descartável, para que a primeira vez que você ler aquele arquivo não seja o dia em que precisa dele.

Antes de fechar esta aba, abra o seu projeto no Supabase e veja se alguma coisa está tirando uma cópia num calendário. Essa única resposta é o trabalho inteiro de hoje, e o branching não muda isso em nenhum sentido. A checklist de segurança de 10 minutos cobre isso junto com o resto do que vale confirmar num app recém-lançado, e o que uma cópia contém e o que o botão de restaurar faz de verdade está detalhado na página de backups do Supabase.

Perguntas frequentes

O branching do Supabase é um backup?

Não. Um branch é um banco de dados Supabase separado, construído a partir das suas migrações, e o Supabase documenta que branches novos começam sem nenhum dos dados do seu projeto principal. O branching te dá um lugar para testar uma mudança antes que ela chegue à produção. Um backup te dá uma cópia dos seus dados de um momento que você consegue nomear, para poder voltar até ele. São dois trabalhos diferentes, e ligar o primeiro não faz nada pelo segundo.

Um branch de preview do Supabase tem os meus dados de produção?

Por padrão não. O Supabase diz que branches novos não começam com nenhum dado do projeto principal, e dá como motivo proteger os seus dados de produção. Você pode pedir um clone na hora de criar o branch, e a CLI descreve essa opção como clonar os dados de produção para o banco do branch. Se você não pediu, o seu branch tem as suas tabelas e nenhuma das suas linhas.

Consigo restaurar meu banco de produção a partir de um branch?

No branching não existe restauração. Um merge aplica as migrações do branch no seu banco de produção e publica as suas mudanças de Edge Functions; nada nesse caminho move linhas, e nada nele reverte qualquer coisa. Se você clonou dados de produção para um branch, poderia tirar um dump daquele banco e reproduzir você mesmo, mas a essa altura quem está te protegendo é o dump, não o branch.

O que acontece com o meu branch quando eu faço merge do pull request?

Um branch de preview é apagado. O Supabase descreve branches de preview como efêmeros e diz que eles são apagados automaticamente quando um pull request é mergeado ou fechado. Branches persistentes são o outro tipo, pensados para staging ou QA, e esses não somem quando o pull request fecha. Então, se um branch está guardando a única cópia de algo que importa para você, o ajuste padrão joga fora no dia em que o trabalho termina.

O branching custa mais caro?

Sim. O Supabase oferece branching nos planos pagos e cobra por branch e por hora, em cima da sua assinatura. Leia a tarifa atual na página de preços deles em vez de aqui, porque ela é deles e eles podem mudar. A versão prática: um branch persistente deixado ligado é um segundo projeto Supabase que você paga a cada hora em que ele existe.

Escrito por

Vlad Tkachenko

Fundador da Reeve

Passo meus dias olhando apps criados com Lovable, Bolt, v0, Cursor e Replit, e a curta lista de erros que aparecem neles sem parar.

Mais sobre o autor

Leia depois

Não sabe como está o seu próprio app?

Faça um scan gratuito e receba uma nota clara de A a F em cerca de 20 segundos. Sem conta e sem cartão.

Verificar meu app grátis

Verificação externa automatizada, não uma auditoria completa. A ausência de achados não é garantia de segurança.