Pular para o conteúdo

Backups

Como restaurar um backup do Supabase, e o que quebra depois

Como restaurar um backup do Supabase pelo painel ou por um arquivo de dump, o que a restauração substitui e por que o seu app pode continuar quebrado no fim.

Vlad Tkachenko11 min de leitura
Uma cópia salva se abrindo para dentro de um banco de dados, com as linhas chegando uma após a outra e preenchendo o espaço vazio abaixo.

Em resumo

  • Para restaurar um backup do Supabase, ou você volta o projeto pelo painel, ou reaplica um arquivo de dump em um projeto com o psql. Qual dos dois está disponível para você foi decidido antes de hoje.
  • Copie o banco como ele está agora antes de restaurar qualquer coisa. Uma restauração substitui as tabelas que estão na cópia, então toda linha escrita desde então vai junto.
  • O desfecho comum é uma restauração que dá certo e um app que continua quebrado, porque os arquivos enviados e as contas de acesso nunca estiveram na cópia do banco.

Alguma coisa no seu banco de dados deu errado e, pela primeira vez, você tem uma cópia. Agora você está olhando para um botão que nunca apertou, em um projeto com usuários de verdade dentro, tentando entender o que ele está prestes a fazer com eles.

Aqui está a parte que guia após guia deixa de fora. Quase todo artigo sobre como restaurar um backup do Supabase termina no momento em que a restauração acaba, e é aí que começa a maior parte do problema. O desfecho comum não é uma restauração que falha. É uma que dá certo e deixa o app quebrado assim mesmo, porque um backup do banco nunca conteve nada além do banco.

Ajuda parar de imaginar isso como recuperar seus dados. Uma restauração troca o seu banco por um mais antigo, mais parecido com trocar um arquivo inteiro do que com devolver uma pasta ao lugar. Tudo o que vem abaixo decorre disso.

Como eu restauro um backup do Supabase?

Três caminhos, e qual deles está aberto para você hoje foi decidido antes de hoje.

CaminhoO que fazO que exige
O painel do SupabaseSubstitui o banco daquele projeto por uma cópia noturna com data que você escolheUm plano pago, e a cópia ainda dentro da sua janela
Point-in-time recoveryVolta o projeto inteiro para o minuto que você indicarO adicional PITR, contratado antes daquilo de que você está se recuperando
Um arquivo de dump, reaplicado com psqlCarrega o arquivo no projeto que você apontar, inclusive um recém-criadoO arquivo, e a senha de banco do projeto de destino

Os dois primeiros devolvem seus dados onde eles já estavam. O terceiro é o único que consegue colocá-los em outro lugar, que é do que você precisa no dia em que o problema é a sua conta e não os seus dados.

Se você não tem certeza de qual deles tem, o plano do Supabase em que você está resolve os dois primeiros e conferir leva uns dois minutos.

Copie o que você tem agora, antes de restaurar qualquer coisa

Tire primeiro uma cópia do banco no estado quebrado em que ele está. É um comando só, e é o que torna reversível cada decisão seguinte.

pg_dump "postgresql://…sua string de conexão…" \
  --clean --if-exists --no-owner \
  --file before-restore-2026-08-24.sql

Há dois motivos, e o segundo as pessoas costumam aprender depois.

O primeiro é que uma restauração é uma substituição. As tabelas da cópia voltam exatamente como estavam, então toda linha escrita nelas desde então vai junto. Uma cliente que se cadastrou hoje de manhã é uma linha que você está prestes a apagar de propósito.

O segundo é que o seu banco quebrado ainda é o único lugar onde parte dos seus dados existe. Se a cópia é de terça e o estrago aconteceu na quinta, tudo o que foi criado na quarta está na sua frente agora e em nenhum outro lugar. Restaure por cima e some pela segunda vez, dessa vez pela sua mão e não pelo acidente.

Enquanto você trabalha, desligue tudo o que escreve linhas novas. O raciocínio é o mesmo de depois de qualquer exclusão: a lacuna entre a cópia e agora fica mais cara quanto mais tempo o app continua enchendo ela.

Restaurando pelo painel do Supabase

Isso substitui o banco do seu projeto pela cópia que você escolher, e o projeto fica indisponível enquanto roda.

Abra o projeto com que o seu app conversa, vá em Database e depois Backups, e escolha a cópia com data. Leia os passos exatos na documentação de backups do próprio Supabase, porque o painel é reorganizado e esta página não vai perceber quando isso acontecer.

Quanto demora depende do tamanho do seu banco, que é a resposta do próprio Supabase. Coloque um aviso de manutenção antes de começar.

O point-in-time recovery é a mesma operação com um botão mais fino. Em vez de escolher ontem à noite, você indica um minuto e o projeto volta até ali. O Supabase descreve isso como destrutivo, e essa é a palavra certa. As notas de suporte deles acrescentam que uma restauração point-in-time não pode começar enquanto os slots de replicação e as assinaturas existentes não forem removidos. Ou seja, se algo no seu app acompanha mudanças do banco conforme elas acontecem, esse é um passo para fazer antes em vez de um erro para encontrar no meio do caminho.

Nenhum dos dois caminhos consegue colocar seus dados em outro projeto. Os dois agem sobre o projeto em que você está, o que significa que nenhum está disponível no dia em que o que quebrou é o seu acesso à conta.

Restaurando um arquivo de dump com o psql

Você aponta o psql para um projeto e reaplica o arquivo nele. Esse projeto pode ser o que você tinha, ou um recém-criado em uma conta que você abriu hoje de manhã.

psql -d "postgresql://…string de conexão do projeto de destino…" \
  --variable ON_ERROR_STOP=1 \
  --single-transaction \
  --file backup-2026-08-09.sql

Duas dessas opções vale a pena entender, porque o comportamento padrão do psql é o surpreendente.

ON_ERROR_STOP=1 para no primeiro erro. Sem ela, o psql lê o erro, imprime e segue para a linha seguinte, então um arquivo que falhou na linha 400 de 30.000 termina assim mesmo em um prompt com cara de sucesso, sobre um banco a que falta tudo o que vinha depois daquela linha. --single-transaction embrulha o arquivo inteiro em uma operação só, de modo que uma falha deixa o banco como estava em vez de pela metade.

Depois as credenciais, que é onde muita gente trava. Reaplicar um backup significa escrever, então precisa de algo que possa escrever. Uma chave anon não dá conta e uma somente de leitura também não. O que o psql quer é a senha de banco do projeto de destino, que fica nas configurações do seu projeto Supabase, em Database.

O que volta depende do que está no arquivo, e isso ficou decidido quando o dump foi feito. Suas contas de acesso são a parte para conferir antes de confiar nele. Elas vivem em um schema chamado auth ao lado das senhas criptografadas, e o Supabase documenta movê-las entre projetos como um trabalho com passos próprios. Se você vai restaurar em um projeto novo e quer que as pessoas entrem com a senha que já têm, leia essa página antes de começar.

E um projeto novo tem uma URL nova e chaves novas. O seu app continua apontado para o antigo até você mudar isso, que é a primeira linha da próxima seção.

Restaurou, e o app continua quebrado

Esse é o desfecho normal. É quase sempre uma de cinco coisas, e a primeira leva um minuto.

Uma restauração pousa no schema onde as suas tabelas vivem. Seus arquivos enviados estão fora dele e nunca estiveram na cópia, e se as suas contas de acesso voltam depende de como aquela cópia foi feita.
O que você vêO que aconteceu de fatoO que fazer
O app carrega e toda lista está vaziaEle ainda está conversando com o projeto antigoColoque a URL e a chave publicável do projeto novo nas configurações do app e faça o deploy de novo
Imagens, avatares e uploads sumiramOs arquivos vivem no Storage, fora do banco. As linhas restauradas guardam só o caminho de cada arquivoRestaure seus arquivos da cópia própria deles. Nenhum backup de banco os contém, em nenhum caminho
Ninguém consegue entrarAs contas vivem no schema auth, e se elas estavam no arquivo depende de como o dump foi feitoSiga o guia de migração de auth do Supabase, ou restaure de novo a partir de uma cópia que inclua esse schema
As páginas leem bem e salvar qualquer coisa falhaO banco voltou legível e não gravávelCrie uma linha pelo app antes de dar por encerrado. O parágrafo abaixo tem o detalhe
Um recurso está quebrado e a tabela dele está boaAs edge functions vivem no seu repositório, fora do bancoFaça o deploy delas de novo pelo seu builder ou pelo repo

A quarta merece a atenção. Permissão de leitura e permissão de escrita são concedidas separadamente, e uma restauração pode acertar uma e errar a outra. Então as páginas se enchem com os seus dados, tudo parece recuperado, e aí a primeira pessoa que envia um formulário recebe um erro. Olhar para o app nunca vai te mostrar isso, porque olhar é ler.

Como saber se a restauração funcionou mesmo

Entre na sua conta, ache uma linha que você consiga nomear, e então escreva uma. Nessa ordem, e a última é a checagem que conta.

As duas vão para o mesmo banco restaurado, e as linhas estão visivelmente lá nos dois casos. Só a segunda descobre se a restauração chegou ao fim.
  • Entre pelo app do jeito que um usuário entraria, em vez de abrir o editor de tabelas do Supabase. Isso testa o app, a conexão e as contas de acesso de uma vez só.
  • Ache uma linha de que você se lembra. Um pedido específico, um cliente com nome, a última coisa que você adicionou antes de quebrar. "Os dados parecem estar aí" é uma sensação; uma linha que você consegue nomear é uma checagem.
  • Compare uma contagem com o que você esperava. Abra a sua maior tabela no editor do Supabase e leia o número de linhas. Uma restauração que parou no meio costuma aparecer aqui como um número pequeno demais.
  • E então escreva alguma coisa. Crie uma linha do jeito que um usuário faz: faça um pedido de teste, salve um perfil, publique um comentário. Essa é a checagem que falha quando as outras três passam, e é a única coisa que prova que a restauração terminou.
  • Abra algo que um usuário enviou. Se o seu app tem imagens ou anexos, clique em um. Se os seus arquivos voltaram é uma pergunta separada de se as suas linhas voltaram.

O que fazer agora

O que fazer

  • Copie o banco como ele está agora, antes de restaurar qualquer coisa. É um pg_dump, e é o que torna reversível a decisão seguinte.
  • Desligue tudo o que escreve linhas novas enquanto você trabalha, porque uma restauração apaga o que chegou depois da cópia.
  • Escolha o caminho pelo problema. Uma restauração pelo painel conserta seus dados; só um arquivo de dump reaplicado com psql consegue levá-los para um projeto novo.
  • Se você usa psql, ative ON_ERROR_STOP=1. Uma restauração que desistiu no meio em silêncio é idêntica a uma que deu certo.
  • Confira a restauração escrevendo, não lendo. Entre, ache uma linha que você consiga nomear, e então crie uma pelo app.
  • Trate seus arquivos enviados e suas contas de acesso como trabalhos separados. Nenhum dos dois acaba quando o banco acaba.

Antes de fechar esta aba, descubra se você tem sequer de onde restaurar, e onde isso está. Essa única resposta decide de qual metade deste artigo você vai precisar algum dia. O checklist de segurança de 10 minutos cobre isso junto com o resto do que vale confirmar em um app recém-lançado, e o guia de segurança do Supabase passa pelo que costuma ficar aberto.

O que o Reeve Care faz no dia em que você restaura

A cópia já existe, já foi lida de volta e conferida, e fica fora da sua conta do Supabase. Isso transforma a hora descrita acima em uma escolha de qual cópia, e um botão.

Quatro coisas que isso muda neste artigo especificamente.

A cópia é verificada antes de você precisar dela. Todo backup é lido de volta e contado contra o que entrou, e a data que aparece no seu painel é a da última cópia que passou na conferência, não a da última tentativa. A restauração pela metade contra a qual este artigo avisa é um problema que nós encontramos em uma tarde qualquer, antes de ele ser seu.

A cópia de segurança não é um passo que você precisa lembrar. Apertar restaurar tira antes uma cópia fresca do estado atual, de modo que a própria restauração pode ser desfeita.

Seus arquivos enviados voltam também, assim que você conecta seus buckets do Storage. É a linha da tabela acima que de outro jeito não tem boa resposta.

A chave de banco que guardamos só consegue ler. Uma restauração precisa escrever, então ela pede a senha do seu banco toda vez e não guarda nenhuma. A chave opcional para os seus arquivos consegue escrever, porque o Supabase não emite uma chave somente de leitura para o Storage, e a página onde você a entrega diz isso antes de você entregar.

Os limites entram na mesma frase, porque é melhor conhecê-los antes de pagar do que durante uma queda:

  • Funciona com o Supabase e hoje com mais nada.
  • Você restaura para uma cópia que existe, não para qualquer minuto que citar. No pior caso você perde um intervalo, que é até uma noite no plano de entrada e menos nos dois acima.
  • As contas de acesso nunca são tocadas. Ninguém é deslogado, apagado ou trazido de volta.

Deixe os backups do Supabase ligados de qualquer jeito. Duas cópias em dois lugares é a ideia inteira, e a mais barata das duas já está no seu plano. O que cada plano do Care cobre está na página inicial.

Se você prefere não pagar por nada disso, tudo neste artigo continua funcionando. Um pg_dump numa periodicidade que você cumpra de verdade, guardado em algum lugar que perder a sua conta do Supabase não levaria junto, mais uma restauração de treino por trimestre, leva você quase até o fim. Os três caminhos e o que cada um deixa de fora conta isso sem discurso de venda.

O ciclo inteiro está desenhado passo a passo na página de backups do Supabase: a cópia saindo do Supabase, a conferência que vem atrás dela, e o botão que a coloca de volta.

Perguntas frequentes

Como eu restauro um backup do Supabase?

Existem três caminhos. Pelo painel você escolhe uma cópia noturna com data e o Supabase substitui o banco daquele projeto por ela, o que exige um plano pago. O point-in-time recovery volta o projeto inteiro para o minuto que você indicar, e exige o adicional PITR contratado com antecedência. Ou você mesmo reaplica um arquivo de dump com o psql, que é o único caminho capaz de levar seus dados para outro projeto em outra conta. Antes de qualquer um dos três, tire uma cópia do banco como ele está agora.

Restaurar um backup apaga os dados adicionados depois que ele foi feito?

Sim. Uma restauração é uma substituição e não uma fusão: as tabelas da cópia voltam exatamente como estavam naquele momento, e tudo o que foi escrito nelas depois some. Isso inclui linhas que estavam perfeitamente boas. É por isso que vale parar a escrita do seu app antes de começar, e é por isso que vale guardar uma cópia do estado atual, para poder recolocar por cima as linhas boas mais recentes se depois você decidir que as quer.

A restauração terminou mas as imagens do meu app sumiram. Por quê?

Porque seus arquivos nunca estiveram no backup. O Supabase Storage fica fora do seu banco Postgres, então um backup do banco guarda a linha que aponta para cada arquivo e nenhum dos arquivos em si. Restaurar devolve uma tabela cheia de links para coisas que não estão mais lá, ou que estão em um projeto que você não usa mais. O Storage precisa ser copiado e restaurado à parte, seja qual for o caminho de backup que você escolheu.

Posso restaurar um backup do Supabase em outro projeto?

Só com um arquivo de dump que seja seu. A restauração pelo painel e o point-in-time recovery agem os dois sobre o projeto em que você está, então nenhum deles ajuda no dia em que o problema é você não conseguir entrar na conta. Um arquivo pg_dump reaplicado com o psql entra no projeto que você apontar, inclusive um recém-criado em uma conta nova. É essa a diferença no dia em que ela importa.

Meus usuários vão precisar se cadastrar de novo depois de uma restauração?

Depende de as contas de acesso estarem na cópia. Elas vivem em um schema do banco chamado auth, junto com as senhas criptografadas, e o Supabase documenta movê-las entre projetos como um trabalho com passos próprios, e não como algo que viaja junto com as suas tabelas. Se você vai restaurar em um projeto novo, leia esse guia antes de começar. Uma restauração dentro do mesmo projeto costuma deixar o login intacto.

Quanto tempo demora uma restauração no Supabase?

O Supabase diz que depende do tamanho do seu banco e de quantos dados precisam ser processados, o que é a resposta honesta e não a que ajuda enquanto você espera. Parta do princípio de que o projeto fica indisponível o tempo todo e coloque um aviso de manutenção antes de começar. As notas de suporte deles acrescentam que uma restauração point-in-time não pode começar enquanto os slots de replicação e as assinaturas existentes não forem removidos, então confira isso primeiro se algo no seu app acompanha mudanças do banco em tempo real.

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.