[{"data":1,"prerenderedAt":389},["ShallowReactive",2],{"blog-pt-ai-agent-deleted-my-database":3},{"id":4,"title":5,"body":6,"category":349,"cover":350,"coverAlt":350,"description":351,"draft":352,"extension":353,"faq":354,"image":370,"keywords":371,"meta":377,"navigation":378,"ogTitle":379,"path":380,"published":381,"seo":382,"stem":383,"tldr":384,"updated":381,"__hash__":388},"blog_pt\u002Fblog\u002Fai-agent-deleted-my-database.md","Um agente de IA apagou meus dados do Supabase. O que eu recupero?",{"type":7,"value":8,"toc":336},"minimark",[9,13,16,19,24,27,39,42,46,49,52,55,58,61,65,68,71,74,83,87,90,199,207,211,214,217,223,226,229,233,236,239,242,245,250,254,257,260,263,282,297,304,308,328],[10,11,12],"p",{},"Você pediu para o agente limpar umas linhas de teste, ou consertar uma migração\nque não aplicava. Ele escreveu o SQL sozinho, rodou contra o projeto que o seu\napp em produção usa e avisou que estava pronto. O app continua carregando. A\ntabela está vazia.",[10,14,15],{},"Quando um agente de IA apagou dados do seu banco, o que você consegue recuperar\njá estava decidido antes de ele rodar. Os próximos minutos decidem quanto disso\nsobrevive.",[10,17,18],{},"Aqui está o ponto que quase toda resposta a isso erra. Elas mandam você voltar o\ncódigo, ou pedir para o agente desfazer. Nenhuma das duas encosta nos seus\ndados, e enquanto você tenta, a única coisa que ainda está na sua mão vai\npiorando em silêncio: o que o seu app está escrevendo no banco agora.",[20,21,23],"h2",{"id":22},"o-que-dá-para-recuperar-depois-que-uma-ia-apagou-meus-dados","O que dá para recuperar depois que uma IA apagou meus dados?",[10,25,26],{},"O que estava na última cópia do seu banco feita antes da exclusão, e nada do que\nfoi criado depois dela.",[10,28,29,30,34,35,38],{},"Essa é a resposta inteira, e a maior parte dela foi decidida semanas atrás. Não\ntem etapa de perícia aqui, nada para desapagar, nenhum log esperando no Supabase\npara ser reproduzido. Uma linha removida por um ",[31,32,33],"code",{},"DELETE"," ou por um ",[31,36,37],{},"DROP TABLE","\nsumiu do banco no instante em que a instrução foi confirmada. O que volta é uma\ncópia, e uma cópia existe ou não existe.",[10,40,41],{},"Então você tem duas tarefas pela frente. Descobrir quais cópias existem. E\nimpedir que o intervalo entre a mais recente e agora fique mais caro do que já\nestá.",[20,43,45],{"id":44},"antes-de-tudo-pare-o-que-escreve-no-banco","Antes de tudo: pare o que escreve no banco",[10,47,48],{},"Antes de sair procurando um backup, desligue tudo o que escreve linhas novas.\nLeitura não é problema.",[10,50,51],{},"Existem duas razões, e a segunda pega as pessoas de surpresa.",[10,53,54],{},"A primeira é que restaurar não é mesclar. Recolocar uma cópia substitui as\ntabelas que ela contém pelo que aquelas tabelas tinham na época, e tudo o que\nfoi escrito depois vai junto. Um cliente que se cadastra na hora que você passa\nlendo isto é uma linha que você mesmo vai apagar, mais tarde, num passo que você\njá decidiu dar.",[10,56,57],{},"A segunda é que alguns caminhos pioram enquanto você espera. A recuperação para\num momento específico do Supabase volta o projeto inteiro para um minuto que\nvocê escolhe, então quanto mais o app se afasta do erro, mais trabalho legítimo\nessa volta joga fora junto com o estrago.",[10,59,60],{},"Uma hora atrás de um aviso de manutenção sai barato. Explicar para alguém que o\npedido dele foi criado e depois removido de propósito sai muito mais caro.",[20,62,64],{"id":63},"posso-pedir-para-o-agente-desfazer","Posso pedir para o agente desfazer?",[10,66,67],{},"Não. Ele nunca teve as suas linhas.",[10,69,70],{},"O agente escreveu uma instrução e o seu banco executou. O que ele tem agora é a\ntranscrição daquela conversa, que é uma coisa diferente de uma cópia da tabela.\nPeça para ele reverter a exclusão e você recebe uma resposta muito confiante, um\nSQL plausível e nenhum dado.",[10,72,73],{},"Vale ser específico sobre o risco, porque o pedido parece inofensivo. Rodar o\nagente de novo significa uma segunda sessão sem supervisão contra um banco em\nprodução que já perdeu alguma coisa. Se ele decidir que o jeito de consertar uma\ntabela que sumiu é criar uma, agora tem uma tabela nova e vazia onde estava a\nantiga, e você deixou a perda mais difícil de descrever para quem for te ajudar\ndepois.",[10,75,76,77,82],{},"Tire ele do projeto até você saber onde está pisando. O mesmo vale para o\nhistórico de versões do seu builder: voltar o código para hoje de manhã restaura\nas suas páginas e deixa os seus dados exatamente onde estão, por\n",[78,79,81],"a",{"href":80},"\u002Fblog\u002Fversion-history-is-not-a-backup","razões que vale entender uma vez",".",[20,84,86],{"id":85},"onde-procurar-nesta-ordem","Onde procurar, nesta ordem",[10,88,89],{},"Desça esta lista e pare na primeira que existir. Ela está ordenada por quanto\ndos seus dados volta, que não é a mesma ordem de facilidade.",[91,92,93,109],"table",{},[94,95,96],"thead",{},[97,98,99,103,106],"tr",{},[100,101,102],"th",{},"Onde procurar",[100,104,105],{},"O que pode devolver",[100,107,108],{},"O que já precisava ser verdade",[110,111,112,124,135,146,161,172,187],"tbody",{},[97,113,114,118,121],{},[115,116,117],"td",{},"Recuperação do Supabase para um momento",[115,119,120],{},"O banco como estava em um minuto que você escolhe, inclusive o minuto antes da exclusão",[115,122,123],{},"Um plano pago com o adicional de PITR, contratado antes de hoje",[97,125,126,129,132],{},[115,127,128],{},"Backup diário do Supabase",[115,130,131],{},"O banco como estava na última cópia automática",[115,133,134],{},"Um plano pago",[97,136,137,140,143],{},[115,138,139],{},"Um serviço de backup gerenciado",[115,141,142],{},"O banco como estava na última cópia verificada daquele serviço",[115,144,145],{},"Você conectou um antes de hoje",[97,147,148,155,158],{},[115,149,150,151,154],{},"Um ",[31,152,153],{},"pg_dump"," que você mesmo rodou",[115,156,157],{},"Tudo o que estiver no arquivo, tão velho quanto a última vez que você lembrou",[115,159,160],{},"O arquivo existe e terminou de ser escrito",[97,162,163,166,169],{},[115,164,165],{},"Uma tabela de exclusão suave ou auditoria no app",[115,167,168],{},"Só as linhas das quais o seu app já guardava registro",[115,170,171],{},"Você construiu assim de propósito",[97,173,174,177,184],{},[115,175,176],{},"O histórico de versões do seu builder",[115,178,179],{},[180,181,183],"key-verdict",{"type":182},"danger","Nada",[115,185,186],{},"Ele versiona o seu código, e os seus dados vivem em outro serviço.",[97,188,189,192,196],{},[115,190,191],{},"Perguntar de novo para o agente",[115,193,194],{},[180,195,183],{"type":182},[115,197,198],{},"Ele nunca teve uma cópia das suas linhas.",[10,200,201,202,206],{},"Todo caminho que devolve alguma coisa tem a mesma exigência, e é ela que resolve\na questão: ele precisava existir antes da exclusão. Nenhum deles liga agora e\nalcança o passado.\n",[78,203,205],{"href":204},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","O plano do Supabase que você tem resolve os dois primeiros",",\ne verificar leva uns dois minutos.",[20,208,210],{"id":209},"o-que-volta-e-o-que-cai-no-intervalo","O que volta e o que cai no intervalo",[10,212,213],{},"A cópia, do jeito que estava, e nada do que aconteceu depois dela.",[10,215,216],{},"As linhas criadas entre aquela cópia e a exclusão não estão danificadas nem\nescondidas em algum canto. Elas nunca foram escritas em lugar nenhum além do\nbanco de onde foram removidas. Essa é a parte difícil de aceitar diante de uma\ntabela vazia, porque perder alguma coisa normalmente quer dizer que ela ainda\nestá em algum lugar.",[218,219],"diagram",{"alt":220,"caption":221,"src":222},"Uma linha do tempo da esquerda para a direita. Três cópias marcadas com um visto ficam sobre ela, e as linhas que cada uma guarda aparecem acima como pontinhos preenchidos. Depois da última cópia, mais pontos se acumulam, e então um X vermelho marca a exclusão. Os pontos entre a última cópia e o X ficam em uma faixa sombreada e estão riscados um a um.","Uma restauração leva você de volta à última cópia. As linhas da faixa sombreada nunca foram escritas em nenhum outro lugar, então nada traz elas de volta.","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fthe-gap-1600x460.png",[10,224,225],{},"A largura dessa faixa depende inteiramente do que estava tirando as cópias. Um\nbackup noturno pode colocar um dia inteiro de trabalho dentro dela. A\nrecuperação para um momento específico estreita a faixa para um minuto, e é\nquase todo o motivo de ela custar à parte. Um dump que você tirou no dia em que\nlembrou coloca dentro todo o tempo que passou desde então.",[10,227,228],{},"Existe uma versão disso em que o intervalo quase não pesa, num app cujos dados\nsão principalmente conteúdo seu e mudam devagar. E existe uma em que ele pesa\nmuito: qualquer coisa com pedidos, mensagens ou cadastros, onde um dia de linhas\né um dia de pessoas que vão perceber.",[20,230,232],{"id":231},"o-agente-apagou-uma-parte-não-tudo","O agente apagou uma parte, não tudo",[10,234,235],{},"Aí você tem uma escolha de verdade para fazer, e nenhuma das duas respostas é\nlimpa.",[10,237,238],{},"Uma restauração não recoloca as linhas que faltam deixando o resto em paz. Ela\nsubstitui as tabelas da cópia pelo que aquelas tabelas tinham na época, por\ninteiro. Restaurar traz de volta o que o agente removeu e reverte cada linha boa\nescrita desde então. Não restaurar mantém as linhas boas e deixa o buraco.",[10,240,241],{},"Qual está certa depende de quanto trabalho legítimo existe depois da cópia. Se a\nresposta for quase nenhum, restaure e siga o seu dia. Se a resposta for três\ndias de cadastros de clientes, o caminho lento costuma ganhar: exportar primeiro\nas linhas sobreviventes, restaurar, e depois recolocar as linhas exportadas por\ncima. É trabalhoso, e é o único caminho que não perde nada.",[10,243,244],{},"É também o argumento para copiar o banco no estado quebrado em que ele está\nantes de encostar em qualquer coisa. Decida o que decidir, você quer conseguir\nvoltar para o estado de onde partiu.",[218,246],{"alt":247,"caption":248,"src":249},"Três formas de banco de dados em fila. A primeira é o estado atual, riscado, com uma seta subindo para uma cópia dele marcada com um visto e guardada de lado. A segunda é o ponto de restauração escolhido sendo reproduzido. Uma seta volta da cópia guardada até o resultado, mostrando que a própria restauração pode ser desfeita.","Copie o estado quebrado antes de substituir ele. É a diferença entre uma decisão sobre a qual você pode mudar de ideia e uma que não dá para mudar.","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fsafety-copy-first-1600x520.png",[20,251,253],{"id":252},"como-essa-mesma-hora-corre-quando-já-existe-uma-cópia","Como essa mesma hora corre quando já existe uma cópia",[10,255,256],{},"Mais curta, e mais uma decisão do que uma procura. Você escolhe uma cópia, olha\no que ela guardava e aperta o botão.",[10,258,259],{},"É isso que o Reeve Care faz: cópias verificadas do seu banco do Supabase num\ncalendário, criptografadas e guardadas fora da sua conta do Supabase, com uma\nrestauração em um clique atrás delas. Antes de uma restauração começar, ela tira\numa cópia nova do estado atual, para que a própria restauração possa ser\ndesfeita.",[10,261,262],{},"Os limites vão na mesma frase, porque conhecer eles é como você decide se serve:",[264,265,266,270,273,276,279],"ul",{},[267,268,269],"li",{},"Ele copia o seu banco de dados, e os arquivos que os seus usuários enviaram assim que você conecta os seus buckets do Storage. É opcional e pede uma segunda chave.",[267,271,272],{},"Hoje ele funciona com o Supabase e com mais nada.",[267,274,275],{},"Você restaura para uma cópia que existe, não para qualquer minuto que quiser citar. Na pior das hipóteses você perde um intervalo, ou seja, até uma noite no plano de entrada e menos nos dois acima dele.",[267,277,278],{},"As contas de acesso nunca são tocadas. Ninguém é deslogado, apagado ou trazido de volta.",[267,280,281],{},"A chave de banco que ele guarda só sabe ler, e essa foi a promessa quando você conectou. Escrever dados de volta exige uma que saiba escrever, então uma restauração pede a senha do seu banco toda vez e não guarda nenhuma. A chave opcional para os seus arquivos sabe escrever, porque o Supabase não emite nenhuma somente leitura para o Storage, e a página onde você a entrega diz isso antes.",[10,283,284,288,289,291,292,296],{},[78,285,287],{"href":286},"\u002F#pricing","O que cada plano cobre"," está na página inicial. Se você preferir não\npagar por nada disso, a versão simples da mesma proteção é um ",[31,290,153],{}," num\ncalendário que você realmente cumpra, guardado em algum lugar que perder a sua\nconta do Supabase não levaria junto.\n",[78,293,295],{"href":294},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Os três caminhos e o que escapa de cada um","\npassa por isso sem discurso de venda.",[10,298,299,300,82],{},"Essa hora está mostrada, cópia por cópia, na ",[78,301,303],{"href":302},"\u002Fsupabase-backups","página de backups do\nSupabase",[20,305,307],{"id":306},"o-que-fazer-agora","O que fazer agora",[309,310,311],"key-takeaways",{},[264,312,313,316,319,322,325],{},[267,314,315],{},"Pare tudo o que escreve no banco. É o único passo daqui que fica mais caro quanto mais você demora.",[267,317,318],{},"Descubra quais cópias existem antes de decidir qualquer coisa: primeiro o seu plano do Supabase, depois qualquer dump que você mesmo tirou, depois se o seu app guarda registro das linhas apagadas.",[267,320,321],{},"Copie o banco do jeito que ele está agora, quebrado e tudo. Faça o que fizer em seguida, você quer um caminho de volta até aqui.",[267,323,324],{},"Depois de uma restauração, verifique se o app ainda consegue escrever. Um banco que lê certo e recusa um insert é uma restauração pela metade, e só um insert prova isso.",[267,326,327],{},"Quando o urgente passar, monte a cópia que teria transformado tudo isso num problema de dez minutos em vez de uma manhã.",[10,329,330,331,335],{},"Antes de fechar esta aba, abra o seu projeto no Supabase e descubra se alguma\ncoisa está copiando o seu banco, e anote onde essa cópia fica. A\n",[78,332,334],{"href":333},"\u002Fchecklist","checklist de segurança de 10 minutos"," cobre isso junto com o resto\ndo que vale confirmar num app recém-lançado.",{"title":337,"searchDepth":338,"depth":338,"links":339},"",3,[340,342,343,344,345,346,347,348],{"id":22,"depth":341,"text":23},2,{"id":44,"depth":341,"text":45},{"id":63,"depth":341,"text":64},{"id":85,"depth":341,"text":86},{"id":209,"depth":341,"text":210},{"id":231,"depth":341,"text":232},{"id":252,"depth":341,"text":253},{"id":306,"depth":341,"text":307},"Backups",null,"Um agente de IA apagou dados do seu banco. O que você recupera já estava decidido antes de ele rodar, e os próximos minutos decidem o resto.",false,"md",[355,358,361,364,367],{"q":356,"a":357},"Um agente de IA apagou linhas no meu banco do Supabase. Dá para trazer de volta?","Só a partir de uma cópia feita antes de ele rodar, então a primeira coisa é descobrir se existe alguma. Veja o que o seu plano do Supabase inclui, depois procure qualquer dump que você mesmo tenha tirado, depois veja se o seu app por acaso guarda registro das linhas apagadas. Se nada disso existir, as linhas se foram, e nenhum trabalho no app vai mudar isso. Descubra tudo isso antes de escrever qualquer coisa nova no banco.",{"q":359,"a":360},"Posso pedir para o agente devolver os dados?","Não. O agente nunca teve as suas linhas. Ele mandou uma instrução para o seu banco e o banco executou, então o que ele tem agora é a transcrição da conversa, não uma cópia da tabela. Pedir para ele desfazer a exclusão devolve uma resposta muito confiante e nenhum dado. E significa uma segunda sessão sem supervisão contra um banco que já perdeu alguma coisa.",{"q":362,"a":363},"Estou no plano gratuito do Supabase. Tem alguma coisa para recuperar?","Do Supabase, não. Os backups automáticos começam nos planos pagos, e a recuperação para um momento específico é um adicional acima disso, então um projeto gratuito não tem cópia de ontem em lugar nenhum. Sobra um dump que você mesmo tenha tirado, ou uma tabela de exclusão suave ou de auditoria que o seu app já escrevia. Verifique as duas antes de dar tudo por perdido, e verifique antes de continuar usando o app.",{"q":365,"a":366},"Devo deixar o app rodando enquanto decido o que fazer?","Desligue tudo o que escreve. Leitura não é problema. Linhas novas são problema em dobro: restaurar uma cópia remove tudo o que entrou depois dela, então um pedido que chega agora é um dado que você mesmo vai apagar mais tarde, e uma volta para um momento específico tem mais trabalho de verdade para jogar fora quanto mais você demora. Um aviso de manutenção por uma hora custa menos que a segunda perda.",{"q":368,"a":369},"O agente apagou algumas linhas, mas não todas. Restauro tudo mesmo assim?","Esse é o caso desconfortável, e não existe resposta limpa. Uma restauração substitui por inteiro as tabelas da cópia, então ela traz de volta o que você perdeu e ao mesmo tempo reverte cada linha boa escrita desde então. Qual caminho seguir depende de quanto trabalho de verdade existe depois da cópia. Se for muito, exportar antes as linhas sobreviventes e recolocá-las por cima da restauração é mais lento e não perde nada.","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",[372,373,374,375,376],"ia apagou os dados do meu banco recuperar","agente de ia apagou meus dados","cursor apagou meu banco de dados","agente de ia apagou uma tabela","recuperar dados depois de exclusão por ia",{},true,"Um agente de IA apagou meus dados do Supabase","\u002Fblog\u002Fai-agent-deleted-my-database","2026-08-21",{"title":5,"description":351},"blog\u002Fai-agent-deleted-my-database",[385,386,387],"Se um agente de IA apagou dados do seu banco, o que dá para recuperar é o que estava na última cópia feita antes disso. O que veio depois não foi escrito em nenhum outro lugar.","Pare tudo o que escreve linhas novas antes de qualquer outra coisa. Uma restauração remove tudo o que entrou depois da cópia, então um cadastro que chega agora é uma linha que você mesmo vai apagar.","O agente não consegue devolver as linhas. Ele nunca as teve, e rodar ele de novo contra um banco em produção é mais uma chance de perder outra coisa.","id7OxnFZ4SJJ-6BCjx_Up5BBePgvOly7AlcM6OotXPM",1787826050885]