Read this guide in English

Como baixar um backup do Supabase em arquivo .sql

Versão curta: a maioria dos projetos não consegue baixar os backups que o Supabase faz — projetos mais novos usam backups físicos, que restauram no lugar ou não restauram. Mas gerar um arquivo .sql equivalente por conta própria é um único comando, funciona em qualquer plano (inclusive o Free), e o resultado restaura em um projeto Supabase novo depois que você ativa as extensões que o schema usa e, se houver tabelas ligadas a auth.users, restaura os usuários do Auth antes — em outro Postgres, também o schema authe as roles do Supabase. Os dois caminhos estão abaixo, mais uma armadilha na CLI oficial que deixa gente com um “backup” sem nenhum dado dentro.

Verifique o painel primeiro — às vezes o botão existe

Painel → Database → Backups. O que você encontra depende do processo de backup do seu projeto. Projetos antigos ainda em backups lógicos conseguem baixar cada backup diário nessa página, e pronto. Projetos no Postgres 15.8.1.079 ou mais novo — o que inclui praticamente todo projeto criado recentemente — usam backups físicos, que não podem ser baixados. Ativar o PITR faz o mesmo e ainda substitui os backups diários por completo. O conselho da documentação oficial para os dois casos: faça um backup lógico manual com a CLI ou com pg_dump. Que é o resto desta página.

A resposta em um comando: pg_dump para .sql

Copie a string de conexão do Session pooler no botão Connect no topo do painel e preencha a senha do banco. Não a Direct connection — ela usa IPv6, a menos que o projeto tenha o add-on pago de IPv4, e morre com erro de rede na maioria das redes domésticas e de CI.

export DB_URL="postgresql://postgres.<project-ref>:<senha>@aws-0-<regiao>.pooler.supabase.com:5432/postgres"

pg_dump "$DB_URL" \
  --format=plain \
  --schema=public \
  --no-owner --no-privileges \
  --file="backup-$(date +%F).sql"

Três flags fazem o trabalho pesado aqui:

  • --format=plain escreve SQL legível — instruções CREATE TABLE seguidas de blocos COPY com suas linhas. Dá para abrir, fazer grep, comparar e reproduzir com o psql comum.
  • --schema=public captura o schema da sua aplicação. Os schemas gerenciados pelo Supabase — auth (seus usuários), storage (metadados de arquivos) — ficam de fora; despejá-los sem ser superusuário é restrito de qualquer forma. Saiba o que o arquivo não contém antes de precisar dele.
  • --no-owner --no-privileges mantém o arquivo portátil: sem eles o dump fixa roles e grants específicos do Supabase, e reproduzi-lo num Postgres local afoga em erros de ownership.

Uma verificação de versão antes de confiar na saída: pg_dump --version precisa ser pelo menos a versão major do seu servidor (projetos Supabase rodam PG 15 ou 17 — select version(); no editor SQL mostra qual). Um cliente mais antigo se recusa a despejar um servidor mais novo.

A armadilha do supabase db dump: só schema, sem linhas

O conselho da documentação oficial para o plano gratuito cita o supabase db dump, então muita gente começa por ele. Ele produz SQL limpo — e a saída padrão não contém dados. Só definições de schema. Se você bate o olho no arquivo, vê seus CREATE TABLE e guarda como backup, você fez backup de um banco vazio. Suas linhas precisam de uma segunda execução com --data-only:

supabase db dump --db-url "$DB_URL" -f schema.sql
supabase db dump --db-url "$DB_URL" --data-only -f data.sql

(O valor de --db-url precisa estar com percent-encoding — uma senha com @ ou # quebra a URL. Dentro de um repositório vinculado com supabase link, passe --linked no lugar.) Restaurar significa reproduzir schema.sql primeiro e depois data.sql. Se você guardar só um comando desta página, guarde o do pg_dump: um arquivo, schema e dados juntos.

.sql ou .dump — escolha pelo que vai fazer com ele

O .sql puro é a escolha certa quando um humano vai olhar o arquivo: exportações avulsas, mover dados entre ambientes, conferir como uma tabela estava na terça passada. (Quer mover um projeto inteiro, e não só obter um arquivo? O guia de exportação (em inglês) cobre exportações só de schema, só de dados e o caminho de clonagem.) Para um backup recorrente, o formato custom (--format=custom, por convenção .dump) é o padrão melhor: é comprimido, consegue restaurar uma única tabela em vez de tudo, e as decisões de ownership vão para a hora da restauração, onde pertencem. O guia de opções de backup usa o formato custom exatamente por isso. Os dois não são rivais — um backup agendado em formato custom mais uma exportação .sql ocasional quando você precisa olhar os dados é uma configuração normal.

Restaurando o arquivo .sql

psql "$TARGET_DB_URL" -f backup-2026-09-07.sql

Aponte para um banco vazio — um projeto Supabase novo ou um Postgres local. E leia a saída, não o código de saída: o psql continua depois de erros e retorna 0 mesmo assim. Uma linha de ruído é esperada se o destino já tem um schema public (schema "public" already exists — inofensivo); erros citando as suas próprias tabelas são reais e significam que a restauração ficou incompleta. Restaurar especificamente dentro do Supabase, com todas as pegadinhas, tem um guia próprio (em inglês).

“Download automático”: agende em vez disso

Se o que trouxe você até aqui foi querer que o download aconteça toda semana sem você, isso é trabalho de agendador. O guia de GitHub Actions (em inglês) monta um workflow semanal gratuito que despeja seu banco em um bucket seu; o serviço hospedado faz o mesmo em horário fixo e depois testa a restauração, porque um arquivo que ninguém nunca restaurou é uma esperança, não um backup — veja como rodar esse teste você mesmo.

Perguntas frequentes

Consigo baixar os backups diários do próprio Supabase?

Só se o seu projeto ainda usa o processo de backup lógico, mais antigo — esses têm opção de download no painel. Projetos no Postgres 15.8.1.079 ou mais novo, e qualquer projeto com PITR ativado, usam backups físicos, que restauram no lugar mas não podem ser baixados. Para ter um arquivo, gere você mesmo com pg_dump.

Como exportar todo o meu banco do Supabase em SQL?

Rode pg_dump contra a string de conexão do Session pooler do projeto com --format=plain e --schema=public. Isso gera um único arquivo .sql com o schema da sua aplicação e todos os dados. Em um projeto Supabase novo ele restaura depois de dois preparos: ative primeiro as extensões que seu schema usa (a documentação de restauração do Supabase pede isso) e, se alguma tabela referencia auth.users, restaure os usuários do Auth antes — o dump do schema public não os contém, e a foreign key falha contra uma tabela vazia. Em outro Postgres, além disso, você precisa recriar o que o dump referencia sem conter: o schema auth e funções como auth.uid(), e as roles anon/authenticated/service_role — ou as políticas e constraints que dependem disso ficam de fora.

Como exportar uma única tabela em .sql?

Adicione --table ao mesmo comando: pg_dump com --format=plain, --table=public.pedidos e um arquivo de saída. Você recebe a definição e as linhas daquela tabela e nada mais — útil para mover uma tabela entre ambientes ou inspecionar como ela estava numa data.

O que são backups físicos no Supabase — posso ativar ou desativar?

Backups físicos são o processo em nível de bloco que o Supabase usa em projetos no Postgres 15.8.1.079 ou mais novo e em qualquer projeto com PITR — em vez dos backups lógicos antigos, que eram arquivos SQL baixáveis. Não é uma opção que você liga ou desliga: o projeto está em um processo ou no outro conforme a versão e o PITR. Backups físicos restauram no lugar ou num projeto novo, mas não viram arquivo.

O arquivo .sql inclui usuários do Auth ou arquivos do Storage?

Não, duas vezes. Os schemas auth e storage são gerenciados pelo Supabase e ficam fora de um dump do schema public. E os arquivos do Storage não caberiam num arquivo SQL de qualquer forma — o banco só guarda os metadados deles; os bytes ficam em um object store separado e precisam de backup próprio.

Sources

Facts and prices last verified 7 de setembro de 2026 against the sources above. Written by the team behind BackupDrill.

Prefere que o dump caia no seu bucket toda semana, com restauração testada, sem manter um cron? Comece grátis — o plano gratuito cobre backups semanais de um projeto; ensaios de restauração agendados começam no Solo — ou continue no modo faça-você-mesmo com a CLI open source.