[{"data":1,"prerenderedAt":967},["ShallowReactive",2],{"blog-pt-download-your-supabase-backup":3,"blog-index-pt":621},{"id":4,"title":5,"body":6,"category":578,"cover":579,"coverAlt":580,"description":581,"draft":582,"extension":583,"faq":584,"image":599,"keywords":600,"meta":610,"navigation":611,"ogTitle":5,"path":612,"published":613,"seo":614,"stem":615,"tldr":616,"updated":613,"__hash__":620},"blog_pt\u002Fblog\u002Fdownload-your-supabase-backup.md","Por que você não consegue baixar seu backup do Supabase",{"type":7,"value":8,"toc":564},"minimark",[9,13,21,24,29,46,127,135,139,147,150,163,169,173,181,202,205,236,241,245,248,256,259,263,266,272,292,306,310,319,329,336,343,367,370,374,377,394,399,402,416,424,428,431,444,451,459,463,494,498,503,544,557],[10,11,12],"p",{},"Você está num plano pago do Supabase, então tem backups. Você abre Database,\ndepois Backups, e lá estão eles: uma lista de cópias diárias com data, cada uma\ncom um botão Restore. Você procura o botão que deixa baixar seu backup do\nSupabase e guardar num lugar seu, e ele não existe.",[10,14,15,16,20],{},"Nada está quebrado. Esta é a parte que os guias mais antigos ainda contam\nerrado: ",[17,18,19],"strong",{},"num projeto atual não existe backup diário para baixar."," O Supabase\npassou as cópias diárias para outro tipo de backup, um que ele consegue\nrestaurar para você e não consegue te entregar. O botão de download que esses\nguias descrevem pertencia ao tipo antigo. Um arquivo que fica na sua mão agora é\nvocê quem faz, e é outro tipo de arquivo.",[10,22,23],{},"Seu celular é o jeito mais fácil de entender a diferença. O backup que ele faz\nde si mesmo toda noite é completo e exato, e volta num único passo para um\ncelular conectado à mesma conta. Você não consegue abrir esse backup num\nnotebook e tirar suas fotos de lá. Para ter fotos que você possa guardar em\nqualquer lugar, você as exporta, e o que recebe é uma pasta de arquivos comuns.\nO backup diário do Supabase agora é do primeiro tipo. O arquivo que você pode\nter é do segundo.",[25,26,28],"h2",{"id":27},"posso-baixar-meu-backup-do-supabase","Posso baixar meu backup do Supabase?",[10,30,31,32,39,40,45],{},"O diário não, se o seu projeto roda Postgres 15.8.1.079 ou mais novo. A\ndocumentação de backups do Supabase diz que\n",[33,34,38],"a",{"href":35,"rel":36},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fplatform\u002Fbackups",[37],"nofollow","todos os projetos nessa versão e nas mais novas usam backups físicos",",\ne as notas de solução de problemas dizem que, com os backups físicos ativados,\no Supabase\n",[33,41,44],{"href":42,"rel":43},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Ftroubleshooting\u002Fdownload-logical-backups",[37],"não gera mais o arquivo de backup para download",".\nVocê pode restaurar essas cópias quando quiser. Não pode levar nenhuma com você.",[47,48,49,64],"table",{},[50,51,52],"thead",{},[53,54,55,58,61],"tr",{},[56,57],"th",{},[56,59,60],{},"O backup diário do Supabase (físico)",[56,62,63],{},"Um dump que você mesmo faz (lógico)",[65,66,67,79,95,106,117],"tbody",{},[53,68,69,73,76],{},[70,71,72],"td",{},"O que é",[70,74,75],{},"Um snapshot dos arquivos que o Postgres guarda em disco",[70,77,78],{},"SQL: instruções para reconstruir cada tabela, depois as linhas",[53,80,81,84,87],{},[70,82,83],{},"Quem restaura",[70,85,86],{},"O Supabase, quando você aperta Restore",[70,88,89,90,94],{},"Você, com ",[91,92,93],"code",{},"psql",", em qualquer Postgres",[53,96,97,100,103],{},[70,98,99],{},"Para onde pode ir",[70,101,102],{},"Este projeto, ou um novo na mesma região",[70,104,105],{},"Outro projeto, outra conta, seu notebook, seu servidor",[53,107,108,111,114],{},[70,109,110],{},"Dá para baixar",[70,112,113],{},"Não",[70,115,116],{},"Já é um arquivo",[53,118,119,122,124],{},[70,120,121],{},"Sobrevive à perda do acesso à conta",[70,123,113],{},[70,125,126],{},"Sim, se você guardar em outro lugar",[10,128,129,130,134],{},"A última linha merece uma segunda leitura. O Supabase diz que, quando um\nprojeto é excluído, ele remove todos os dados associados,\n",[33,131,133],{"href":35,"rel":132},[37],"incluindo os backups guardados no S3",".\nExclua o projeto e as cópias diárias vão junto, no mesmo passo.",[25,136,138],{"id":137},"qual-é-a-diferença-entre-um-backup-físico-e-um-lógico","Qual é a diferença entre um backup físico e um lógico?",[10,140,141,142,146],{},"De onde a cópia é tirada. Um backup físico copia os arquivos que o próprio\nPostgres grava em disco, o que o Supabase descreve como\n",[33,143,145],{"href":35,"rel":144},[37],"um snapshot do diretório subjacente do banco",".\nUm backup lógico pede ao banco que se descreva em SQL, tabela por tabela e\nlinha por linha, e grava essa descrição num arquivo de texto.",[10,148,149],{},"Cada um é bom numa coisa diferente. Uma cópia física é rápida de fazer e rápida\nde pôr de volta, e volta exatamente como estava. Só o mesmo tipo de instalação\nPostgres de onde ela veio consegue lê-la, o que no Supabase significa as\nmáquinas do próprio Supabase. Uma cópia lógica demora mais para ser reaplicada e\nocupa mais espaço, e qualquer Postgres da mesma versão ou mais novo consegue\ncarregá-la. É de novo o backup do celular e a pasta exportada, e só a segunda é\num arquivo que você pode ter.",[10,151,152,153,158,159,162],{},"O botão de download de que as pessoas lembram era do tipo lógico. A\n",[33,154,157],{"href":155,"rel":156},"https:\u002F\u002Fgithub.com\u002Fsupabase\u002Fsupabase\u002Fblob\u002Fb34da8d7eca562be5e1341413d140dd76ee19f25\u002Fapps\u002Fdocs\u002Fcontent\u002Fguides\u002Fplatform\u002Fbackups.mdx",[37],"própria documentação do Supabase, em 2025",",\ndizia que o processo diário rodava ",[91,160,161],{},"pg_dumpall",", compactava o arquivo SQL e o\nguardava, e que os backups físicos pesam menos no banco e evitam travar suas\ntabelas por muito tempo. A mesma página dizia que as cópias físicas não podem\nser baixadas pela seção Backups do painel.",[164,165],"diagram",{"alt":166,"caption":167,"src":168},"Duas faixas. Na de cima, um snapshot lacrado dentro de um limite tracejado do Supabase chega a dois projetos que estão dentro dele, ambos com marca de certo, e uma terceira seta é riscada no limite, antes de um projeto do Supabase, um notebook e um servidor desenhados em cinza. Na de baixo, um arquivo simples fora de qualquer limite chega a esses mesmos três, acesos e com marca de certo.","A cópia diária pode voltar para o Supabase e para nenhum outro lugar. Um dump que você mesmo faz vai para qualquer lugar onde rode um Postgres.","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fwhere-each-copy-can-go-1600x640.png",[25,170,172],{"id":171},"como-sei-qual-deles-o-meu-projeto-tem","Como sei qual deles o meu projeto tem?",[10,174,175,176,180],{},"Procure uma opção de download na página de Backups. Abra Database, depois\nBackups, no painel do Supabase. Se cada cópia com data tiver um jeito de ser\nbaixada, seu projeto ainda está em backups lógicos. Se cada uma oferecer Restore\ne mais nada, está em backups físicos, e a\n",[33,177,179],{"href":155,"rel":178},[37],"documentação antiga do Supabase usava exatamente esse teste",".",[10,182,183,184,187,188,191,192,195,196,199,200,180],{},"A segunda conferência é o número da versão. Ele aparece em Project Settings,\ndepois General. Qualquer coisa a partir de ",[91,185,186],{},"15.8.1.079"," significa backups\nfísicos. Leia da esquerda para a direita: uma versão que começa com ",[91,189,190],{},"17"," é mais\nnova que qualquer ",[91,193,194],{},"15",", e ",[91,197,198],{},"15.8.1.100"," é mais nova que ",[91,201,186],{},[10,203,204],{},"Dois casos não precisam de conferência nenhuma:",[206,207,208,225],"ul",{},[209,210,211,219,220,224],"li",{},[17,212,213,214,218],{},"A ",[33,215,217],{"href":216},"\u002Fblog\u002Fsupabase-point-in-time-recovery","recuperação para um ponto no tempo","\nestá ligada."," Ela roda em backups físicos por definição. O Supabase também\ndiz que, se você\n",[33,221,223],{"href":35,"rel":222},[37],"desligar a recuperação para um ponto no tempo",",\nele continua fazendo backups físicos, então o download não volta.",[209,226,227,230,231,235],{},[17,228,229],{},"Você está no plano gratuito."," A página de Backups não tem nada para baixar\nnem para restaurar, porque o plano gratuito não te dá backups diários que você\npossa usar.\n",[33,232,234],{"href":233},"\u002Fblog\u002Fback-up-supabase-free-tier","Fazer uma cópia sem terminal"," é o ponto de\npartida.",[164,237],{"alt":238,"caption":239,"src":240},"Duas listas de cinco cópias com data lado a lado, uma encabeçada por um arquivo simples e a outra por um snapshot lacrado. Na lista da esquerda, cada linha tem uma marca de restaurar e uma de download. Na da direita, cada linha tem a mesma marca de restaurar, e onde ficava a de download há um contorno tracejado vazio.","A mesma página em dois projetos. À esquerda, os antigos backups lógicos, cada um com seu download. À direita, backups físicos: só restaurar.","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fwhich-one-you-have-1600x620.png",[25,242,244],{"id":243},"do-que-cada-um-me-protege","Do que cada um me protege?",[10,246,247],{},"O backup diário te protege de algo que dá errado dentro do projeto. Um arquivo\nque fica com você cobre também a perda do próprio projeto.",[10,249,250,251,255],{},"O primeiro tipo de perda é o que você mesmo causa. Uma exclusão que levou mais\nlinhas do que você queria, uma migração que um agente de IA escreveu e você\naprovou, um script apontado para a tabela errada. A cópia diária é exatamente a\nferramenta para isso: você escolhe ontem, aperta Restore e o projeto volta ao\nlugar. Até onde ela alcança depende do seu plano, e\n",[33,252,254],{"href":253},"\u002Fblog\u002Fdoes-supabase-back-up-my-database","em qual plano você está"," se resolve\nem uns dois minutos.",[10,257,258],{},"O segundo tipo não tem nada a ver com um erro no banco. Um cartão que venceu\nenquanto você estava fora, um login que você não consegue recuperar, um projeto\nque alguém excluiu. As cópias ficam atrás da mesma porta que o projeto, e a\nporta é o que fechou. O backup do seu celular se comporta do mesmo jeito: ele te\nsalva se o celular cair no mar, e não serve para nada no dia em que você não\nconsegue mais entrar na conta onde ele está. O Supabase guarda os backups junto\ncom a plataforma porque é isso que faz a restauração ser um botão só. Uma cópia\nque sobrevive à conta precisa ficar em outro lugar, o que no Supabase significa\num dump lógico tirado de dentro dela.",[25,260,262],{"id":261},"o-que-restaurar-significa-em-cada-caso","O que restaurar significa em cada caso?",[10,264,265],{},"Com a cópia diária, o Supabase faz o trabalho e você escolhe onde ela vai parar.\nCom um arquivo que fica com você, o trabalho é seu, e ele pode ir parar em\nqualquer lugar.",[10,267,268,271],{},[17,269,270],{},"Restaurar a cópia diária no mesmo projeto"," substitui o banco pela cópia que\nvocê escolher. O Supabase diz que o projeto fica inacessível enquanto isso roda\ne que um banco maior demora mais.",[10,273,274,277,278,283,284,287,288,291],{},[17,275,276],{},"Restaurá-la num projeto novo"," é um recurso pago que o Supabase chama de\n",[33,279,282],{"href":280,"rel":281},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fplatform\u002Fclone-project",[37],"Restore to a New Project",",\nainda marcado como beta. Ele cria um projeto separado na mesma região, com seus\nusuários e as senhas deles em hash, e é cobrado como um segundo projeto. Um\naviso na mesma página passa fácil despercebido. Ele copia o banco inteiro,\ninclusive extensões que agem para fora, como ",[91,285,286],{},"pg_cron"," e ",[91,289,290],{},"pg_net",", e essas\ntarefas começam a rodar assim que a restauração termina. Se uma tarefa agendada\ndo seu app envia e-mails ou chama uma API de pagamento, o projeto novo também\ncomeça a fazer isso, a partir do momento em que existe.",[10,293,294,297,298,300,301,305],{},[17,295,296],{},"Restaurar um arquivo que fica com você"," significa reaplicá-lo com ",[91,299,93],{}," no\ndestino que você apontar: um projeto novo do Supabase, um em outra conta ou um\nPostgres no seu próprio computador.\n",[33,302,304],{"href":303},"\u002Fblog\u002Fhow-to-restore-a-supabase-backup","Como restaurar um backup do Supabase","\npassa pelos comandos, e pelo que continua quebrado quando eles terminam.",[25,307,309],{"id":308},"como-consigo-uma-cópia-do-meu-banco-do-supabase-em-arquivo","Como consigo uma cópia do meu banco do Supabase em arquivo?",[10,311,312,313,318],{},"Faça você mesmo um dump lógico. O Supabase publica isso no\n",[33,314,317],{"href":315,"rel":316},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fplatform\u002Fmigrating-within-supabase\u002Fbackup-restore",[37],"guia de backup e restauração","\ndele como três comandos, cada um gravando um arquivo:",[320,321,326],"pre",{"className":322,"code":324,"language":325},[323],"language-text","supabase db dump --db-url \"postgresql:\u002F\u002F…\" -f roles.sql --role-only\nsupabase db dump --db-url \"postgresql:\u002F\u002F…\" -f schema.sql\nsupabase db dump --db-url \"postgresql:\u002F\u002F…\" -f data.sql --use-copy --data-only\n","text",[91,327,324],{"__ignoreMap":328},"",[10,330,331,332,335],{},"A string de conexão vem do botão Connect no topo do seu projeto, com a senha do\nseu banco no lugar do marcador. A CLI do Supabase precisa do Docker instalado,\nporque roda o ",[91,333,334],{},"pg_dump"," dentro de um contêiner em vez de usar um do seu\ncomputador.",[10,337,338,339,180],{},"Guarde os três arquivos. O segundo sozinho é a forma das suas tabelas sem\nnenhuma linha dentro, e\n",[33,340,342],{"href":341},"\u002Fblog\u002Fsupabase-backup-auth-users","seus usuários só estão no terceiro",[10,344,345,346,348,349,354,355,357,358,363,364,366],{},"Você também pode rodar o ",[91,347,334],{}," direto. Duas coisas para saber antes.\n",[33,350,353],{"href":351,"rel":352},"https:\u002F\u002Fsupabase.com\u002Fdocs\u002Fguides\u002Fself-hosting\u002Frestore-from-platform",[37],"O Supabase diz","\nque um ",[91,356,334],{}," cru leva os schemas internos do Supabase junto com os seus, e\nque reaplicá-los causa erros de permissão na volta. E o\n",[33,359,362],{"href":360,"rel":361},"https:\u002F\u002Fwww.postgresql.org\u002Fdocs\u002Fcurrent\u002Fapp-pgdump.html",[37],"Postgres documenta","\nque o ",[91,365,334],{}," não faz dump de um servidor com versão principal mais nova que a\ndele, então uma cópia antiga no seu computador se recusa a começar em vez de\ngravar um arquivo ruim.",[10,368,369],{},"Guarde os arquivos num lugar que não seja a sua conta do Supabase, e não só no\nseu notebook.",[25,371,373],{"id":372},"posso-restaurar-um-backup-do-supabase-no-meu-próprio-computador","Posso restaurar um backup do Supabase no meu próprio computador?",[10,375,376],{},"Um lógico, sim, num Postgres da mesma versão principal ou mais novo. A cópia\ndiária física não pode ser restaurada em lugar nenhum além do Supabase.",[10,378,379,380,384,385,389,390,393],{},"A regra de versões vem do próprio Postgres. A documentação dele diz que um dump\n",[33,381,383],{"href":360,"rel":382},[37],"deve poder ser carregado em versões mais novas","\ne que não há garantia de que carregue numa mais antiga, nem mesmo naquela de\nonde veio. O guia do Supabase para\n",[33,386,388],{"href":351,"rel":387},[37],"levar um projeto da plataforma para o Supabase auto-hospedado","\nmostra como isso fica. A plataforma pode rodar Postgres 17 enquanto a imagem\nauto-hospedada usa 15 por padrão, e aí o arquivo de dados traz uma linha,\n",[91,391,392],{},"SET transaction_timeout = 0",", que o Postgres 15 não reconhece.",[164,395],{"alt":396,"caption":397,"src":398},"Duas faixas. Na de cima, um arquivo sai de um banco marcado 15 e chega a um banco marcado 17, com marca de certo. Na de baixo, um arquivo sai de um banco marcado 17 e para diante de um banco marcado 15, riscado.","Um dump anda para a frente. Carregá-lo num Postgres mais antigo do que aquele de onde veio é onde os erros começam.","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fforwards-not-backwards-1600x560.png",[10,400,401],{},"Esses mesmos três arquivos também são o caminho para sair do Supabase de vez.\nAquele guia é a rota para rodar o Supabase num servidor seu, e a diferença de\nversões é a primeira coisa sobre a qual ele avisa.",[10,403,404,405,408,409,411,412,415],{},"No seu próprio computador, a CLI do Supabase sobe uma cópia local do Supabase no\nDocker quando você digita ",[91,406,407],{},"supabase start",". Reaplique os três arquivos nela com\no comando ",[91,410,93],{}," do guia de backup e restauração do Supabase, apontado para\n",[91,413,414],{},"postgresql:\u002F\u002Fpostgres:postgres@localhost:54322\u002Fpostgres",", e seus dados ficam\nlegíveis no seu próprio computador, sem nenhuma conta no meio.",[10,417,418,419,423],{},"Há um lugar onde o Supabase ainda oferece um backup para baixar. Um projeto\ngratuito pausado além da janela de restauração troca o botão Restore pelo\ndownload da última cópia feita antes da pausa, e\n",[33,420,422],{"href":421},"\u002Fblog\u002Fsupabase-project-paused-recover","o que fazer com esse arquivo"," é assunto\nde outro artigo.",[25,425,427],{"id":426},"o-que-não-está-em-nenhuma-das-duas-cópias","O que não está em nenhuma das duas cópias?",[10,429,430],{},"Seus arquivos enviados, suas Edge Functions e a maior parte das configurações do\nseu projeto.",[10,432,433,434,438,439,443],{},"O Supabase diz que os backups do banco\n",[33,435,437],{"href":35,"rel":436},[37],"não incluem objetos guardados pela Storage API",".\nO banco guarda uma linha que descreve cada arquivo, e o arquivo em si mora em\noutro lugar, então nenhum backup do banco, em nenhum plano, contém o que seus\nusuários enviaram.\n",[33,440,442],{"href":441},"\u002Fblog\u002Fsupabase-storage-backup","Fazer backup do Storage"," é um trabalho à parte.",[10,445,446,447,450],{},"A lista que o Supabase dá para\n",[33,448,282],{"href":280,"rel":449},[37],"\né um bom inventário do resto: Edge Functions, configurações de autenticação e\nchaves de API, configurações do Realtime, configurações de extensões e réplicas\nde leitura precisam ser configuradas de novo à mão.",[10,452,453,454,458],{},"Uma lacuna afeta só o arquivo que fica com você. Se o seu app guarda segredos no\nSupabase Vault ou usa colunas criptografadas, o Supabase diz que\n",[33,455,457],{"href":315,"rel":456},[37],"os arquivos de backup nunca contêm a chave raiz",",\nsó os dados criptografados. Um projeto novo começa com a própria chave, então\nesses valores chegam ilegíveis até a chave antiga ser copiada. E a chave antiga\nsó pode ser obtida enquanto o projeto antigo ainda está ativo. Depois que esse\nprojeto é pausado ou excluído, a chave não pode mais ser recuperada, e nada do\nque ela criptografava também.",[25,460,462],{"id":461},"o-que-fazer-esta-semana","O que fazer esta semana",[464,465,466],"key-takeaways",{},[206,467,468,471,474,485,488,491],{},[209,469,470],{},"Abra Database, depois Backups, e procure uma opção de download. Se cada cópia só oferecer Restore, você tem backups físicos e nada ali para levar embora.",[209,472,473],{},"Faça hoje um dump lógico com os três comandos e guarde os três arquivos juntos.",[209,475,476,477,480,481,484],{},"Procure ",[91,478,479],{},"auth.users"," no ",[91,482,483],{},"data.sql"," antes de confiar nele. É o arquivo onde estão as suas contas, quando estão.",[209,486,487],{},"Guarde os arquivos num lugar que não seja a sua conta do Supabase.",[209,489,490],{},"Se você usa o Supabase Vault ou colunas criptografadas, leia como a chave raiz é transferida antes de precisar dela. Ela não está no arquivo.",[209,492,493],{},"Reaplique o dump uma vez num projeto descartável ou num Supabase local, para que a primeira vez que você o abrir não seja o dia em que precisa dele.",[25,495,497],{"id":496},"onde-o-reeve-care-entra","Onde o Reeve Care entra",[10,499,500],{},[17,501,502],{},"O Care faz a cópia lógica por você, guarda fora do Supabase, e cada cópia é um\narquivo que você pode baixar.",[206,504,505,522,528,534],{},[209,506,507,510,511,514,515,517,518,521],{},[17,508,509],{},"Baixe qualquer cópia como zip."," Dentro vão ",[91,512,513],{},"schema.sql",", ",[91,516,483],{}," e\n",[91,519,520],{},"roles.sql",", um manifesto que conta as linhas de cada tabela e uma nota sobre\ncomo carregar tudo em qualquer Postgres. É um dump padrão, então qualquer\ndesenvolvedor consegue abrir, e qualquer outra hospedagem também.",[209,523,524,527],{},[17,525,526],{},"Guardada fora da sua conta do Supabase",", criptografada, então continua lá\nno dia em que a conta não estiver.",[209,529,530,533],{},[17,531,532],{},"Relida antes de contar."," A data no seu painel é a da última cópia que foi\naberta e verificada, nunca a da última tentativa.",[209,535,536,539,540,543],{},[17,537,538],{},"Seus usuários estão dentro."," O schema ",[91,541,542],{},"auth"," viaja com suas tabelas, e os\narquivos que seus usuários enviaram vêm junto assim que você conecta uma\ncredencial do Storage.",[10,545,546,547,551,552,556],{},"O Care guarda uma cópia do seu banco do Supabase. Deixe os backups diários do\nSupabase ligados ao lado dela: eles são o caminho mais rápido de volta de uma\nmigração que deu errado, e o arquivo é o que sobra se você perder a conta. Como\numa cópia é feita, conferida e baixada está desenhado passo a passo na\n",[33,548,550],{"href":549},"\u002Fsupabase-backups","página de backups do Supabase",", e\n",[33,553,555],{"href":554},"\u002Fpricing","o que cada plano inclui"," está na página de preços.",[10,558,559,560,563],{},"Antes de fechar esta aba, abra Database, depois Backups, e olhe ao lado da sua\ncópia mais recente. Se ali não houver nada para baixar, o próximo arquivo que\nvocê tiver é o que você mesmo fizer, e\n",[33,561,562],{"href":341},"o que deixa um dump completo"," é o que vale\nler antes de fazê-lo.",{"title":328,"searchDepth":565,"depth":565,"links":566},3,[567,569,570,571,572,573,574,575,576,577],{"id":27,"depth":568,"text":28},2,{"id":137,"depth":568,"text":138},{"id":171,"depth":568,"text":172},{"id":243,"depth":568,"text":244},{"id":261,"depth":568,"text":262},{"id":308,"depth":568,"text":309},{"id":372,"depth":568,"text":373},{"id":426,"depth":568,"text":427},{"id":461,"depth":568,"text":462},{"id":496,"depth":568,"text":497},"Backups","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcover-1200x630.png","Quatro snapshots diários de um banco empilhados num invólucro do Supabase, o da frente aceso e lacrado, ao lado de uma bandeja vazia.","Você não consegue baixar seu backup do Supabase num projeto atual, porque a cópia diária é um snapshot físico. Como conferir e como ter uma cópia só sua.",false,"md",[585,587,589,592,594,596],{"q":28,"a":586},"O diário não, se o seu projeto roda Postgres 15.8.1.079 ou mais novo. O Supabase diz que todo projeto nessas versões usa backups físicos e que, uma vez ativados, ele deixa de gerar o arquivo de backup para download. Você ainda pode restaurar essas cópias pelo painel. Para ter um arquivo que você possa guardar, faça você mesmo um dump lógico com a CLI do Supabase ou com pg_dump.",{"q":138,"a":588},"Um backup físico copia os arquivos que o Postgres mantém em disco. Ele restaura rápido e de forma exata, e só no mesmo tipo de instalação Postgres de onde veio, o que no Supabase significa que o Supabase restaura para você. Um backup lógico é SQL: as instruções para reconstruir cada tabela, seguidas das linhas. Ele demora mais para ser reaplicado e carrega em qualquer Postgres da mesma versão ou mais novo, inclusive num computador seu.",{"q":590,"a":591},"Por que o botão de download sumiu?","Porque aquilo que ele baixava não é mais produzido. O botão pertencia aos antigos backups diários lógicos, arquivos SQL que o Supabase compactava e guardava. Quando um projeto passa para backups físicos, o Supabase deixa de produzir esse arquivo, e a página de Backups oferece Restore sem nenhum download ao lado. Desligar a recuperação para um ponto no tempo não traz o botão de volta, porque o Supabase continua fazendo backups físicos depois disso.",{"q":309,"a":593},"Rode os três comandos que o Supabase publica no guia de backup e restauração dele: supabase db dump com --role-only, depois sem opções para o schema, depois com --data-only e --use-copy para as linhas. A CLI precisa do Docker, porque roda o pg_dump dentro de um contêiner. Guarde os três arquivos juntos, num lugar que não seja a sua conta do Supabase.",{"q":373,"a":595},"Um lógico, sim, num Postgres da mesma versão principal ou mais novo. O Postgres documenta que um dump carrega para a frente e que não há garantia de que carregue numa versão mais antiga, e o Supabase dá um exemplo: a plataforma dele pode rodar Postgres 17 enquanto o Supabase auto-hospedado usa 15 por padrão. Uma cópia diária física não pode ser restaurada em lugar nenhum além do Supabase.",{"q":597,"a":598},"O plano Pro me dá um backup para baixar?","Não num projeto com Postgres 15.8.1.079 ou mais novo. Nesse caso, o Pro dá backups físicos diários guardados por sete dias, que você pode restaurar no mesmo projeto ou, enquanto o recurso estiver em beta, num projeto novo da mesma região. Nenhum dos dois caminhos te dá um arquivo. Uma cópia para baixar é algo que você mesmo faz, ou paga alguém para fazer.","\u002Fblog\u002Fdownload-your-supabase-backup\u002Fcard-800x500.png",[601,602,603,604,605,606,607,608,609],"download supabase backup","baixar backup supabase","backup físico supabase","backup lógico supabase","arquivo de backup supabase","cópia do meu banco supabase","backup supabase não dá para baixar","baixar backup diário supabase","exportar backup supabase",{},true,"\u002Fblog\u002Fdownload-your-supabase-backup","2026-09-26",{"title":5,"description":581},"blog\u002Fdownload-your-supabase-backup",[617,618,619],"Você não consegue baixar seu backup do Supabase num projeto com Postgres 15.8.1.079 ou mais novo. Lá as cópias diárias são snapshots físicos: o Supabase consegue restaurá-las para você, e você não consegue baixá-las.","O botão de download que os guias mais antigos descrevem pertencia aos backups lógicos, que eram arquivos SQL. Só os projetos que continuam nas versões antigas ainda têm esse botão.","Para ter um arquivo seu, você mesmo faz um dump lógico com a CLI do Supabase ou com pg_dump. É a única cópia que sobrevive à perda do acesso à conta.","Q0pFTPFFqTbTIZKi8N0ZJbTBftO8GVA2hWhKLxtTpPU",[622,629,635,641,647,653,659,665,671,677,683,689,695,701,707,708,713,719,725,730,736,742,748,754,760,766,772,778,783,788,793,799,805,811,817,823,829,835,841,847,853,859,865,870,876,882,888,894,900,905,911,917,923,929,934,940,945,951,956,962],{"path":623,"title":624,"description":625,"published":626,"category":627,"image":628,"draft":582},"\u002Fblog\u002Fbase44-security-scan","Scan de segurança do Base44: o que só ele enxerga","O scan de segurança do Base44 verifica sete tipos de problema por dentro. Esta é a metade que ele lê e mais ninguém, e a metade que ele nunca olha.","2026-10-10","Noções de segurança","\u002Fblog\u002Fbase44-security-scan\u002Fcard-800x500.png",{"path":630,"title":631,"description":632,"published":633,"category":627,"image":634,"draft":582},"\u002Fblog\u002Fapi-key-leaked-what-to-do","Sua chave de API vazou. A ordem em que agir","Uma chave de API vazou e você não sabe o que fazer primeiro. Nem toda chave no seu frontend é um vazamento, e a ordem importa mais que a pressa.","2026-10-09","\u002Fblog\u002Fapi-key-leaked-what-to-do\u002Fcard-800x500.png",{"path":636,"title":637,"description":638,"published":639,"category":627,"image":640,"draft":582},"\u002Fblog\u002Finfinite-recursion-in-policy-for-relation","\"Infinite recursion detected in policy\" sem desligar o RLS","\"Infinite recursion detected in policy for relation\" significa que a sua policy perguntou à tabela que ela protege. Veja como quebrar o círculo.","2026-10-08","\u002Fblog\u002Finfinite-recursion-in-policy-for-relation\u002Fcard-800x500.png",{"path":642,"title":643,"description":644,"published":645,"category":627,"image":646,"draft":582},"\u002Fblog\u002Fno-api-key-found-in-request","\"No API key found in request\" no Supabase, e a correção errada","\"No API key found in request\" significa que sua requisição chegou ao Supabase sem chave. Quase toda resposta aponta para as regras do seu banco.","2026-10-07","\u002Fblog\u002Fno-api-key-found-in-request\u002Fcard-800x500.png",{"path":648,"title":649,"description":650,"published":651,"category":627,"image":652,"draft":582},"\u002Fblog\u002Fis-base44-safe","O Base44 é seguro? O que vimos em 5.442 apps Base44","O Base44 é seguro? Rodamos nove verificações em 5.442 apps Base44 no ar. Quase todas tiraram B por motivos que o dono nunca escolheu.","2026-10-06","\u002Fblog\u002Fis-base44-safe\u002Fcard-800x500.png",{"path":654,"title":655,"description":656,"published":657,"category":627,"image":658,"draft":582},"\u002Fblog\u002Fmove-a-secret-to-an-edge-function","Esconder uma chave de API: mova para uma Edge Function do Supabase","Esconder uma chave de API é tirá-la do navegador, e uma Edge Function do Supabase é o menor lugar para guardá-la. Dois passos em volta pesam mais.","2026-10-05","\u002Fblog\u002Fmove-a-secret-to-an-edge-function\u002Fcard-800x500.png",{"path":660,"title":661,"description":662,"published":663,"category":627,"image":664,"draft":582},"\u002Fblog\u002Fenv-file-exposed-on-your-server","Seu arquivo .env está exposto? Os doze caminhos para testar","Seu arquivo .env está exposto no seu próprio servidor web? Doze endereços dizem isso em um minuto, e um acerto significa que tudo nele já é público.","2026-10-04","\u002Fblog\u002Fenv-file-exposed-on-your-server\u002Fcard-800x500.png",{"path":666,"title":667,"description":668,"published":669,"category":627,"image":670,"draft":582},"\u002Fblog\u002Fis-v0-safe","Segurança do v0: os 1.790 aplicativos v0 escaneados tiraram A","A segurança do v0 medida em 1.790 aplicativos v0 no ar: todos tiraram A. Só 17 citavam um banco de dados, e é sobretudo isso que esse A mede.","2026-10-03","\u002Fblog\u002Fis-v0-safe\u002Fcard-800x500.png",{"path":672,"title":673,"description":674,"published":675,"category":627,"image":676,"draft":582},"\u002Fblog\u002Fis-bolt-safe","O Bolt é seguro? O que vimos em 1.123 aplicativos Bolt","O Bolt é seguro? Passamos 1.123 aplicativos Bolt no ar por nove verificações. A hospedagem saiu limpa. Os achados: chaves e tabelas abertas nos aplicativos.","2026-10-02","\u002Fblog\u002Fis-bolt-safe\u002Fcard-800x500.png",{"path":678,"title":679,"description":680,"published":681,"category":627,"image":682,"draft":582},"\u002Fblog\u002Fis-supabase-down-or-your-app","O Supabase caiu ou o problema é o seu app? Como saber","O Supabase caiu ou o problema é o seu app? Um projeto pausado, um banco cheio e um erro seu parecem iguais. Quatro verificações separam os casos.","2026-10-01","\u002Fblog\u002Fis-supabase-down-or-your-app\u002Fcard-800x500.png",{"path":684,"title":685,"description":686,"published":687,"category":627,"image":688,"draft":582},"\u002Fblog\u002Fdoes-supabase-encrypt-my-data","O Supabase criptografa meus dados? Sim. Veja o que isso impede","O Supabase criptografa os dados? Sim: AES-256 em repouso, TLS em trânsito, SOC 2 e ISO 27001. O que cada um cobre, e o vazamento que nenhum deles impede.","2026-09-30","\u002Fblog\u002Fdoes-supabase-encrypt-my-data\u002Fcard-800x500.png",{"path":690,"title":691,"description":692,"published":693,"category":627,"image":694,"draft":582},"\u002Fblog\u002Fsupabase-free-plan-limits","Quanto custa o Supabase? Os limites do plano gratuito","Quanto custa o Supabase: o plano gratuito tem 500 MB de banco, 5 GB de egress e nenhum backup. O que acontece em cada limite e o que o Pro de $25 muda.","2026-09-29","\u002Fblog\u002Fsupabase-free-plan-limits\u002Fcard-800x500.png",{"path":696,"title":697,"description":698,"published":699,"category":578,"image":700,"draft":582},"\u002Fblog\u002Ftest-your-supabase-backup","Teste o backup do seu Supabase antes do dia em que precisar","Como testar o backup do seu Supabase: restaurar num projeto de teste, contar as linhas, entrar e procurar a linha que falta num arquivo cortado.","2026-09-28","\u002Fblog\u002Ftest-your-supabase-backup\u002Fcard-800x500.png",{"path":702,"title":703,"description":704,"published":705,"category":578,"image":706,"draft":582},"\u002Fblog\u002Fsupabase-backup-github-action","Backup grátis do Supabase com uma GitHub Action, e a pegadinha","Um backup do Supabase com GitHub Action é grátis e serve para muitos apps. O workflow, a connection string certa e o egress de cada execução.","2026-09-27","\u002Fblog\u002Fsupabase-backup-github-action\u002Fcard-800x500.png",{"path":612,"title":5,"description":581,"published":613,"category":578,"image":599,"draft":582},{"path":709,"title":710,"description":711,"published":613,"category":627,"image":712,"draft":582},"\u002Fblog\u002Fsupabase-permission-denied-for-table","Supabase \"permission denied for table\": o grant que falta","A partir de 30 de outubro, uma tabela nova no Supabase responde \"permission denied for table\" até receber um grant. O e-mail mostra só metade.","\u002Fblog\u002Fsupabase-permission-denied-for-table\u002Fcard-800x500.png",{"path":714,"title":715,"description":716,"published":717,"category":627,"image":718,"draft":582},"\u002Fblog\u002Fopen-api-endpoint-exposed","Um endpoint de API aberto é um problema? Leia o JSON","Seu scan apontou um endpoint de API aberto. Se isso importa depende do que voltou, e a maioria dos que encontramos era da própria plataforma.","2026-09-25","\u002Fblog\u002Fopen-api-endpoint-exposed\u002Fcard-800x500.png",{"path":720,"title":721,"description":722,"published":723,"category":627,"image":724,"draft":582},"\u002Fblog\u002Flovable-security-scan","Escaneamento de segurança do Lovable: o que ele não prova","Escaneamento de segurança do Lovable: o que o Quick scan e o Deep scan checam, quando cada um roda, e a única coisa que nenhum escaneamento por dentro prova.","2026-09-24","\u002Fblog\u002Flovable-security-scan\u002Fcard-800x500.png",{"path":341,"title":726,"description":727,"published":728,"category":578,"image":729,"draft":582},"Por que seu dump do Supabase não tem usuários dentro","Rode supabase db dump sozinho e você recebe a forma do seu banco e nenhuma das linhas dele, sem o schema auth onde seus usuários moram.","2026-09-23","\u002Fblog\u002Fsupabase-backup-auth-users\u002Fcard-800x500.png",{"path":731,"title":732,"description":733,"published":734,"category":627,"image":735,"draft":582},"\u002Fblog\u002Fdomain-and-certificate-expiry","Domínio expirado, site fora do ar: o que acontece agora","Seu domínio expirou e seu site está fora do ar. O relógio que começa a correr, por que o certificado é o problema menor, e como conferir os dois.","2026-09-22","\u002Fblog\u002Fdomain-and-certificate-expiry\u002Fcard-800x500.png",{"path":737,"title":738,"description":739,"published":740,"category":627,"image":741,"draft":582},"\u002Fblog\u002Fis-lovable-safe","O Lovable é seguro? O que vimos em 18.554 aplicativos Lovable","O Lovable é seguro? Passamos 18.554 aplicativos Lovable no ar por nove verificações. A plataforma foi a mais limpa de cinco. Os achados estavam nos aplicativos.","2026-09-21","\u002Fblog\u002Fis-lovable-safe\u002Fcard-800x500.png",{"path":743,"title":744,"description":745,"published":746,"category":627,"image":747,"draft":582},"\u002Fblog\u002Fvibe-coded-app-security-checklist","O checklist de segurança do vibe coding, em nove verificações","Um checklist de segurança do vibe coding com nove itens, cada um verificável no seu app de fora por qualquer pessoa, e cada um com um teste de uma linha.","2026-09-20","\u002Fblog\u002Fvibe-coded-app-security-checklist\u002Fcard-800x500.png",{"path":749,"title":750,"description":751,"published":752,"category":627,"image":753,"draft":582},"\u002Fblog\u002Fstripe-secret-key-in-frontend","Uma chave secreta da Stripe no frontend pode mover dinheiro","Uma chave secreta da Stripe exposta no seu frontend pode reembolsar, cobrar e ler cada ficha de cliente que você tem. Sua chave pk_live_ é que deve estar aí.","2026-09-19","\u002Fblog\u002Fstripe-secret-key-in-frontend\u002Fcard-800x500.png",{"path":755,"title":756,"description":757,"published":758,"category":627,"image":759,"draft":582},"\u002Fblog\u002Fvite-and-next-public-env-vars","Variáveis de ambiente do Vite expostas: o prefixo diz publique isto","Variáveis de ambiente do Vite expostas no seu app: fizeram o que o prefixo pediu. VITE_ e NEXT_PUBLIC_ significam publique isto, e a IA nunca soube o custo.","2026-09-18","\u002Fblog\u002Fvite-and-next-public-env-vars\u002Fcard-800x500.png",{"path":761,"title":762,"description":763,"published":764,"category":627,"image":765,"draft":582},"\u002Fblog\u002Fbase44-source-maps","Segurança no Base44: o que um scan aponta e o que é seu para corrigir","Segurança no Base44 em 5.438 apps escaneados: três achados em quase todos são da plataforma, o source map é o selo do Base44, e a sua parte é uma lista curta.","2026-09-17","\u002Fblog\u002Fbase44-source-maps\u002Fcard-800x500.png",{"path":767,"title":768,"description":769,"published":770,"category":627,"image":771,"draft":582},"\u002Fblog\u002Fis-cursor-ai-safe","O Cursor AI é seguro? O editor, o código e o app que você publicou","O Cursor AI é seguro? Três perguntas em uma busca: o que o Cursor guarda, o que o código que ele escreve erra, e se o app que você publicou está aberto.","2026-09-16","\u002Fblog\u002Fis-cursor-ai-safe\u002Fcard-800x500.png",{"path":773,"title":774,"description":775,"published":776,"category":627,"image":777,"draft":582},"\u002Fblog\u002Fis-replit-safe","O Replit é seguro? O que vimos em 3.042 aplicativos Replit no ar","O Replit é seguro? Passamos 3.042 aplicativos Replit no ar por nove verificações externas. Os achados estavam no aplicativo publicado, não no host.","2026-09-15","\u002Fblog\u002Fis-replit-safe\u002Fcard-800x500.png",{"path":441,"title":779,"description":780,"published":781,"category":578,"image":782,"draft":582},"Supabase storage backup: sua cópia do banco não tem nenhum arquivo","Um Supabase storage backup é uma tarefa à parte. Os backups do banco guardam a lista dos seus arquivos e nenhum deles, então cada upload fica quebrado.","2026-09-14","\u002Fblog\u002Fsupabase-storage-backup\u002Fcard-800x500.png",{"path":216,"title":784,"description":785,"published":786,"category":578,"image":787,"draft":582},"Point-in-time recovery do Supabase: preço e limites","O point-in-time recovery do Supabase rebobina seu banco para qualquer segundo da última semana. Custa $100 por mês além do Pro e cobre só o banco.","2026-09-13","\u002Fblog\u002Fsupabase-point-in-time-recovery\u002Fcard-800x500.png",{"path":421,"title":789,"description":790,"published":791,"category":578,"image":792,"draft":582},"Projeto Supabase pausado? Seus dados continuam lá","O Supabase pausou seu projeto depois de uma semana sem atividade. Nada foi apagado, Restaurar fica ao lado do nome e você tem um ano antes disso mudar.","2026-09-12","\u002Fblog\u002Fsupabase-project-paused-recover\u002Fcard-800x500.png",{"path":794,"title":795,"description":796,"published":797,"category":627,"image":798,"draft":582},"\u002Fblog\u002Fsafest-ai-app-builder","Qual builder de apps com IA é mais seguro? 30.998 apps testados","Qual builder de apps com IA é mais seguro? Escaneamos 30.998 apps no ar do Lovable, Base44, Replit, v0 e Bolt. O builder não é o que decide sua nota.","2026-09-11","\u002Fblog\u002Fsafest-ai-app-builder\u002Fcard-800x500.png",{"path":800,"title":801,"description":802,"published":803,"category":627,"image":804,"draft":582},"\u002Fblog\u002Fenable-rls-on-every-supabase-table","Ative Row Level Security em toda tabela do Supabase e comprove","Ativar Row Level Security no Supabase sem política fecha a tabela por completo. Uma política sem a chave ligada não faz nada. Aqui está o SQL, e o teste.","2026-09-10","\u002Fblog\u002Fenable-rls-on-every-supabase-table\u002Fcard-800x500.png",{"path":806,"title":807,"description":808,"published":809,"category":627,"image":810,"draft":582},"\u002Fblog\u002Fsupabase-rls-disabled-in-public","Supabase \"RLS disabled in public\": o que o aviso não vê","O Supabase marca \"RLS disabled in public\" como erro. Ele não diz nada sobre a política de leitura que deixa a sua tabela igualmente aberta.","2026-09-09","\u002Fblog\u002Fsupabase-rls-disabled-in-public\u002Fcard-800x500.png",{"path":812,"title":813,"description":814,"published":815,"category":627,"image":816,"draft":582},"\u002Fblog\u002Frotate-supabase-service-role-key","Como rotacionar uma chave service_role do Supabase vazada","O Supabase manda fechar o vazamento primeiro. Outros guias mandam rotacionar agora. O que vale depende de para onde a sua chave service_role vazou.","2026-09-08","\u002Fblog\u002Frotate-supabase-service-role-key\u002Fcard-800x500.png",{"path":818,"title":819,"description":820,"published":821,"category":627,"image":822,"draft":582},"\u002Fblog\u002Fvibe-coding-security-scanners-compared","Scanners de segurança para vibe coding comparados, o nosso incluído","O melhor scanner de segurança para vibe coding depende de três perguntas que nenhuma lista de recursos responde. Dez ferramentas comparadas, com preços.","2026-09-07","\u002Fblog\u002Fvibe-coding-security-scanners-compared\u002Fcard-800x500.png",{"path":824,"title":825,"description":826,"published":827,"category":627,"image":828,"draft":582},"\u002Fblog\u002Fsupabase-security-checker","Supabase security checker: faça você mesmo as cinco verificações","Um Supabase security checker lê o seu app publicado em vez das configurações do projeto. Aqui estão as cinco verificações e como fazer cada uma sozinho.","2026-09-06","\u002Fblog\u002Fsupabase-security-checker\u002Fcard-800x500.png",{"path":830,"title":831,"description":832,"published":833,"category":627,"image":834,"draft":582},"\u002Fblog\u002Fvibe-coding-security-scanner","Scanner de segurança para vibe coding: o que ele não vê","Um scanner de segurança para vibe coding lê seu app no ar, de fora. O que isso cobre, as quatro coisas que ele não consegue ver e como ler o resultado.","2026-09-05","\u002Fblog\u002Fvibe-coding-security-scanner\u002Fcard-800x500.png",{"path":836,"title":837,"description":838,"published":839,"category":627,"image":840,"draft":582},"\u002Fblog\u002Fmissing-security-headers","Cabeçalhos de segurança faltando: quando isso importa","Cabeçalhos de segurança faltando é o achado que nosso scanner mais imprime. Contra o que eles protegem e quando são a linha menos urgente do relatório.","2026-09-04","\u002Fblog\u002Fmissing-security-headers\u002Fcard-800x500.png",{"path":842,"title":843,"description":844,"published":845,"category":627,"image":846,"draft":582},"\u002Fblog\u002Fopenai-api-key-exposed-in-frontend","Sua chave de API da OpenAI está exposta no frontend. Troque-a.","Uma chave de API da OpenAI exposta no frontend não pode ser presa a um domínio. Troque-a hoje, mova a chamada para o seu servidor e limite o gasto.","2026-09-03","\u002Fblog\u002Fopenai-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":848,"title":849,"description":850,"published":851,"category":627,"image":852,"draft":582},"\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps","Chave de API exposta no frontend: o que 30.998 apps entregam","Uma chave de API exposta no seu frontend costuma ser uma chave do Google Maps. Escaneamos 30.998 apps vibe-coded e contamos quais segredos vazam de verdade.","2026-09-02","\u002Fblog\u002Fwhat-secrets-leak-from-vibe-coded-apps\u002Fcard-800x500.png",{"path":854,"title":855,"description":856,"published":857,"category":578,"image":858,"draft":582},"\u002Fblog\u002Fsupabase-backup-tools-compared","Ferramentas de backup do Supabase comparadas, a nossa incluída","Quatro tipos de ferramenta de backup do Supabase, o que cada uma copia de verdade e quando uma GitHub Action gratuita ganha de pagar, nós inclusive.","2026-09-01","\u002Fblog\u002Fsupabase-backup-tools-compared\u002Fcard-800x500.png",{"path":860,"title":861,"description":862,"published":863,"category":627,"image":864,"draft":582},"\u002Fblog\u002Freplit-secrets-explained","Como usar secrets no Replit, e o que ainda assim é publicado","Como usar secrets no Replit: adicionar um, ler de volta e resolver as duas causas do undefined. E as chaves que a ferramenta Secrets não consegue proteger.","2026-08-31","\u002Fblog\u002Freplit-secrets-explained\u002Fcard-800x500.png",{"path":233,"title":866,"description":867,"published":868,"category":578,"image":869,"draft":582},"Backups do plano gratuito do Supabase: como fazer sem terminal","No plano gratuito do Supabase não existe backup nenhum: a cópia é você que faz. Como fazer uma pelo painel e o que a rota do CSV deixa para trás.","2026-08-30","\u002Fblog\u002Fback-up-supabase-free-tier\u002Fcard-800x500.png",{"path":871,"title":872,"description":873,"published":874,"category":627,"image":875,"draft":582},"\u002Fblog\u002Fis-supabase-secure","O Supabase é seguro? É. Seu projeto é outra pergunta","O Supabase é seguro? A plataforma é auditada, criptografada e passa por pentests. A documentação deles diz onde isso termina e começam suas configurações.","2026-08-29","\u002Fblog\u002Fis-supabase-secure\u002Fcard-800x500.png",{"path":877,"title":878,"description":879,"published":880,"category":627,"image":881,"draft":582},"\u002Fblog\u002Fwhere-to-find-supabase-api-keys","Onde ficam as chaves de API do Supabase: anon, service_role e URL","A URL do projeto, a chave anon e a chave service_role ficam todas numa página do painel. Aqui está onde ela fica, e qual dos quatro valores vai no seu app.","2026-08-28","\u002Fblog\u002Fwhere-to-find-supabase-api-keys\u002Fcard-800x500.png",{"path":883,"title":884,"description":885,"published":886,"category":627,"image":887,"draft":582},"\u002Fblog\u002Fnew-row-violates-row-level-security-policy","New row violates row-level security policy no Supabase. E agora?","\"New row violates row-level security policy\" significa que o Supabase recusou uma escrita. O conserto rápido reabre a tabela para qualquer um.","2026-08-27","\u002Fblog\u002Fnew-row-violates-row-level-security-policy\u002Fcard-800x500.png",{"path":889,"title":890,"description":891,"published":892,"category":627,"image":893,"draft":582},"\u002Fblog\u002Fcors-wildcard-security-risk","Um curinga CORS é um risco de segurança? Quase nunca.","Um curinga CORS é um risco de segurança? Em geral é o padrão do seu builder e não entrega nada que o seu servidor já não desse a qualquer um que pedisse.","2026-08-26","\u002Fblog\u002Fcors-wildcard-security-risk\u002Fcard-800x500.png",{"path":895,"title":896,"description":897,"published":898,"category":578,"image":899,"draft":582},"\u002Fblog\u002Fsupabase-branching-is-not-a-backup","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.","2026-08-25","\u002Fblog\u002Fsupabase-branching-is-not-a-backup\u002Fcard-800x500.png",{"path":303,"title":901,"description":902,"published":903,"category":578,"image":904,"draft":582},"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.","2026-08-24","\u002Fblog\u002Fhow-to-restore-a-supabase-backup\u002Fcard-800x500.png",{"path":906,"title":907,"description":908,"published":909,"category":627,"image":910,"draft":582},"\u002Fblog\u002Fsupabase-storage-bucket-public","Seu bucket do Supabase Storage é público. Isso é um problema?","Um bucket público do Supabase Storage significa que quem tem a URL de um arquivo pode abri-lo. Não significa que alguém possa listar o que está lá dentro.","2026-08-23","\u002Fblog\u002Fsupabase-storage-bucket-public\u002Fcard-800x500.png",{"path":912,"title":913,"description":914,"published":915,"category":627,"image":916,"draft":582},"\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend","Uma chave de API do Google no frontend é um problema?","Uma chave de API do Google exposta no seu frontend é a chave que nosso scanner mais encontra, e quase sempre está tudo bem. Um ajuste gratuito decide isso.","2026-08-22","\u002Fblog\u002Fgoogle-api-key-exposed-in-frontend\u002Fcard-800x500.png",{"path":918,"title":919,"description":920,"published":921,"category":578,"image":922,"draft":582},"\u002Fblog\u002Fai-agent-deleted-my-database","Um agente de IA apagou meus dados do Supabase. O que eu recupero?","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.","2026-08-21","\u002Fblog\u002Fai-agent-deleted-my-database\u002Fcard-800x500.png",{"path":924,"title":925,"description":926,"published":927,"category":627,"image":928,"draft":582},"\u002Fblog\u002Fcan-anyone-read-your-supabase-database","Qualquer um consegue ler seu banco Supabase? Testamos 3.680 apps","Qualquer um consegue ler seu banco de dados Supabase sem fazer login? Escaneamos 30.998 apps no ar criadas com builders de IA e medimos quantas dizem que sim.","2026-08-18","\u002Fblog\u002Fcan-anyone-read-your-supabase-database\u002Fcard-800x500.png",{"path":930,"title":931,"description":932,"published":927,"category":627,"image":933,"draft":582},"\u002Fblog\u002Fsource-maps-exposed-in-production","Source maps expostos: seu app está publicando o código original","Um source map exposto deixa qualquer um ler o código original do seu app, comentários incluídos. A verificação de 30 segundos e o que importa de verdade.","\u002Fblog\u002Fsource-maps-exposed-in-production\u002Fcard-800x500.png",{"path":935,"title":936,"description":937,"published":938,"category":627,"image":939,"draft":582},"\u002Fblog\u002Fsupabase-new-api-keys","As novas chaves de API do Supabase: qual vai no seu app?","O Supabase trocou anon e service_role por chaves publicáveis e secretas. Qual delas pertence ao seu app e qual nunca deve estar lá?","2026-08-12","\u002Fblog\u002Fsupabase-new-api-keys\u002Fcard-800x500.png",{"path":253,"title":941,"description":942,"published":943,"category":578,"image":944,"draft":582},"O Supabase faz backup do meu banco de dados? Depende do plano.","O Supabase faz backup do seu banco de dados? Todo dia nos planos pagos, e nada no gratuito. Como descobrir o que você tem e o que essa cópia não cobre.","2026-08-11","\u002Fblog\u002Fdoes-supabase-back-up-my-database\u002Fcard-800x500.png",{"path":946,"title":947,"description":948,"published":949,"category":627,"image":950,"draft":582},"\u002Fblog\u002Fsupabase-rls-on-but-table-still-public","O Supabase Row Level Security está ligado. A tabela continua pública.","Ligar o Supabase Row Level Security não protege uma tabela. Quem protege são as políticas, e a que consertou o seu app pode deixar qualquer um entrar.","2026-08-10","\u002Fblog\u002Fsupabase-rls-on-but-table-still-public\u002Fcard-800x500.png",{"path":952,"title":953,"description":954,"published":949,"category":578,"image":955,"draft":582},"\u002Fblog\u002Fversion-history-is-not-a-backup","O histórico de versões não é backup. Ele não desfaz um delete.","Lovable e Bolt guardam um histórico de versões do seu código. Seu banco de dados é um serviço à parte, e voltar atrás não traz os seus dados de volta.","\u002Fblog\u002Fversion-history-is-not-a-backup\u002Fcard-800x500.png",{"path":957,"title":958,"description":959,"published":960,"category":578,"image":961,"draft":582},"\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database","Três formas de fazer backup de um banco Supabase, e o que falta","O painel, o pg_dump e um serviço gerenciado. O que cada um salva de verdade, o que deixa de fora sem avisar e qual sobrevive a perder a conta.","2026-08-09","\u002Fblog\u002Fthree-ways-to-back-up-a-supabase-database\u002Fcard-800x500.png",{"path":963,"title":964,"description":965,"published":960,"category":627,"image":966,"draft":582},"\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend","Quais chaves de API são seguras no navegador e quais não são","Sua chave anon do Supabase foi feita para ser pública. Sua chave service_role não, e ela ignora todas as regras que você criar. Como diferenciar as duas.","\u002Fblog\u002Fwhich-api-keys-are-safe-in-your-frontend\u002Fcard-800x500.png",1791618971772]