Vai al contenuto

Backups

Il branching di Supabase non è un backup. Va solo in avanti.

Perché il branching di Supabase non è un backup: un branch parte senza i tuoi dati e un merge sposta solo lo schema. A cosa serve davvero e cosa usare invece.

Vlad Tkachenko8 min di lettura
Una linea di dati che prosegue, con una seconda linea che si stacca e porta accanto un database vuoto.

In breve

  • Il branching di Supabase non è un backup. Un branch è un secondo database per provare le modifiche, e parte senza nessuno dei tuoi dati di produzione.
  • Un merge applica le tue modifiche di schema alla produzione. Non porta mai righe, e non esiste nessuna operazione che rimetta a posto una versione precedente dei tuoi dati.
  • Anche un branch in cui cloni i tuoi dati vive dentro lo stesso account, e un branch di preview viene cancellato quando la sua pull request si chiude.

Hai acceso il branching di Supabase perché sembrava il modo accurato di lavorare. Adesso accanto al tuo progetto c'è un branch di preview, le modifiche si provano lì prima che qualcuno le veda, e tutto l'impianto sembra parecchio più sicuro del mese scorso.

Ed è più sicuro. Solo che non è un backup, e la differenza si vede esattamente in un giorno.

Ecco il pezzo che le guide sul branching saltano: un branch è un secondo database accanto al primo, non una versione precedente di quello. Il branching è il posto dove vai prima di fare una modifica. Un backup è il posto dove vai quando qualcosa è già andato storto. Accendere il branching non deposita una copia dei tuoi dati da nessuna parte.

Il branching di Supabase è un backup?

No. Un branch parte come un database vuoto vestito con il tuo schema, e niente nel branching rimette a posto una versione precedente dei tuoi dati.

La documentazione di Supabase è diretta: «I branch nuovi non partono con nessun dato del tuo progetto principale. Questo serve a proteggere meglio i tuoi dati di produzione sensibili». Un branch viene costruito dalle tue migrazioni, e una migrazione descrive la forma di un database. Le tabelle, le colonne, le policy. Mai le righe.

Quindi il branch che sta accanto al tuo progetto non è la copia di martedì. È un database nuovo che non ha mai visto i tuoi utenti.

Un branch SupabaseUn backup
Contiene le tue righe di primaSolo se ce le hai clonate dentroSì, è tutto il suo mestiere
Può rimettere la produzione com'eraMai
Vive fuori dal tuo account SupabaseNo, è un altro progetto dentroDipende da quale delle tre strade hai preso
Ci sarà ancora il mese prossimoSolo se lo hai reso persistentePer tutto il tempo in cui lo conservi
A cosa serveProvare una modifica prima che raggiunga qualcunoTornare a prima che qualcosa raggiungesse qualcuno

Se non hai mai stabilito cosa stia davvero copiando il tuo database, quello è esattamente il compito verso cui questo articolo vuole mandarti, e il tuo piano ne risolve la maggior parte in due minuti.

Cos'è davvero un branch

Un intero secondo progetto Supabase, con tutto il suo.

«Ogni branch è un ambiente separato con la propria istanza Supabase e le proprie credenziali API», così dice la documentazione. La sua stringa di connessione, le sue chiavi, il suo Storage, i suoi account di accesso, le sue righe. Niente al suo interno è collegato al progetto su cui stanno i tuoi utenti, ed è precisamente questo a rendere sicuro romperci qualcosa.

Quell'isolamento è tutta la funzionalità, ed è anche il motivo per cui non può fare anche da backup. La copia dei tuoi dati che speravi non è mai stata presa, e il posto dove andresti a cercarla è vuoto dal giorno in cui è nato.

Cosa fa un merge, e cosa non fa

Porta le tue modifiche di schema in produzione. Non porta mai righe, in nessuna direzione, in nessun momento.

Quando fai il merge, Supabase applica le migrazioni del tuo branch al tuo database di produzione e distribuisce le tue modifiche alle Edge Functions. Questo è tutto il carico. Una tabella nuova, una colonna nuova, una policy riscritta: quelle viaggiano. Le righe che hai creato provando restano nel branch, e le righe in produzione restano esattamente com'erano, comprese quelle che speravi di sostituire.

Un merge distribuisce la forma del tuo database e il codice che gli sta intorno. Le righe sono l'unica cosa che non è mai stato costruito per spostare.

La gente si aspetta una versione di questo che non esiste: un merge che entri in produzione e rimetta le cose com'erano. Quello che il branching ha al suo posto è un deployment, applicato in avanti, su qualunque cosa si trovi in produzione in quel momento.

Ma io ho clonato i miei dati di produzione nel branch

Allora hai una copia delle tue righe, e tre cose di quella copia decidono quanto vale il giorno in cui ti servirà.

Si può fare e non è una cosa oscura. La CLI di Supabase descrive l'opzione come la clonazione dei dati di produzione nel database del branch, e l'API di management accetta la stessa opzione quando crea un branch. Se l'hai usata, il tuo branch contiene davvero i tuoi dati.

  • È stata presa una volta. Il clone avviene alla creazione del branch e dopo niente lo aggiorna. Ogni ordine, ogni iscrizione e ogni commento da allora vive in produzione e da nessun'altra parte, ed è tutta lì la differenza tra una copia e un calendario.
  • Sta dentro lo stesso account. Un branch è un altro progetto sotto la stessa organizzazione, sulla stessa carta, dietro lo stesso accesso. Ogni modo di perdere il tuo account Supabase si porta via anche il branch, e quello è un disastro diverso dal rovinarsi i propri dati.
  • Nessuno l'ha riletta. Un clone rimasto a metà è identico da fuori a uno arrivato in fondo, fino al momento in cui lo apri.

Il branch è la parte progettata per sparire

Un branch di preview viene cancellato quando la sua pull request viene mergiata o chiusa. È il comportamento documentato della funzionalità.

Supabase definisce i branch di preview «effimeri e adatti a test mirati» e dice che «vengono cancellati automaticamente quando una PR viene mergiata o chiusa». L'altro tipo, i branch persistenti, sono «di lunga durata e consigliati per ambienti come staging, QA o sviluppo», e quelli sopravvivono alla chiusura della pull request.

Un backup sta dietro di te sulla linea del tempo, a un momento che puoi nominare. Un branch corre al tuo fianco, e dietro di lui non c'è niente a cui aggrapparsi.

Quindi con l'impostazione di default, il branch che tiene la tua unica copia clonata è proprio quello che il tuo flusso di lavoro butta il giorno in cui il lavoro finisce. Tenerlo significa renderlo persistente, e un branch persistente è un secondo progetto Supabase acceso. Supabase offre il branching sui piani a pagamento e lo fattura per branch e per ora, sulla loro pagina dei prezzi.

A cosa serve davvero il branching

A parecchio, e questo articolo sarebbe disonesto se non lo dicesse.

Un branch è il posto più economico che esista per scoprire che una migrazione elimina una colonna, prima che elimini la colonna su cui sono seduti i tuoi clienti. Ti lascia provare una modifica alle policy contro un database fatto esattamente come il tuo, con le sue chiavi, così che un errore non raggiunga nessuno. Dà a un'IA un posto dove sbagliare che non è la tua app in produzione. Un backup non può fare niente di tutto questo.

Il buco sta in che tipo di incidente copre. Il branching protegge le modifiche che passano da una pull request. La maggior parte di ciò che davvero costa i dati alla gente non ci passa mai vicino: una cancellazione nell'editor di tabelle di Supabase che ha preso più righe del previsto, uno script di seed puntato sul progetto in produzione, una migrazione scritta da un'IA e approvata all'una di notte, una ripulita di quelli che sembravano dati di prova. Nessuno di questi attraversa un branch mentre va in produzione, ed è lo stesso motivo per cui tornare indietro con il codice non riporta una tabella cancellata.

Quel secondo tipo di incidente è ciò a cui risponde un backup. Sta dietro di te nel tempo e tiene lo stato del tuo database a un momento che puoi nominare, così che un errore commesso fuori dal tuo flusso di lavoro abbia ancora un posto dove tornare.

È anche quello che è Reeve Care: copie programmate del tuo database Supabase, conservate fuori dal tuo account Supabase, rilette e verificate prima che una di esse conti come fatta. Collega i tuoi bucket Storage e i file caricati dai tuoi utenti viaggiano insieme, così un ripristino rimette le righe e le immagini a cui quelle righe puntano.

Tieni acceso il branching comunque. Niente di quanto sopra è un argomento per spegnerlo.

Cosa fare questa settimana

Cosa fare

  • Scopri cosa copia il tuo database secondo un calendario, separatamente da qualsiasi cosa lo divida in branch. Se stabilirlo richiede più di un minuto, la risposta è che non lo fa niente.
  • Se stavi trattando un branch clonato come la tua rete di sicurezza, annota la data in cui è stato creato e la data in cui la sua pull request si chiude. Sono i due estremi di quello che copre.
  • Accendi il backup incluso nel tuo piano Supabase. È la cosa più economica di questa lista e copre il disastro ordinario, cioè che ti sei rovinato i dati da solo.
  • Tieni una copia fuori dal tuo account Supabase, perché un branch e un backup della piattaforma stanno entrambi dietro lo stesso accesso della cosa che proteggono.
  • Ripristina una copia in un progetto usa e getta, così la prima volta che leggi quel file non è il giorno in cui ti serve.

Prima di chiudere questa scheda, apri il tuo progetto Supabase e guarda se qualcosa ne sta prendendo una copia secondo un calendario. Quell'unica risposta è tutto il lavoro di oggi, e il branching non la cambia in nessun senso. La checklist di sicurezza in 10 minuti la copre insieme al resto di quello che vale la pena confermare su un'app appena lanciata, e cosa contiene una copia e cosa fa davvero il pulsante di ripristino è spiegato passo passo sulla pagina sui backup di Supabase.

FAQ

Il branching di Supabase è un backup?

No. Un branch è un database Supabase a sé, costruito dalle tue migrazioni, e Supabase documenta che i branch nuovi partono senza nessuno dei dati del tuo progetto principale. Il branching ti dà un posto dove provare una modifica prima che arrivi in produzione. Un backup ti dà una copia dei tuoi dati a un momento che puoi nominare, così puoi tornarci. Sono due mestieri diversi, e accendere il primo non fa niente per il secondo.

Un branch di preview di Supabase contiene i miei dati di produzione?

Di default no. Supabase dice che i branch nuovi non partono con nessun dato del progetto principale, e indica come motivo la protezione dei tuoi dati di produzione. Puoi chiedere un clone quando crei il branch, e la CLI descrive quell'opzione come la clonazione dei dati di produzione nel database del branch. Se non l'hai chiesta, il tuo branch ha le tue tabelle e nessuna delle tue righe.

Posso ripristinare il mio database di produzione da un branch?

Nel branching non c'è nessun ripristino. Un merge applica le migrazioni del branch al tuo database di produzione e distribuisce le tue modifiche alle Edge Functions; niente su quel percorso sposta righe, e niente inverte alcunché. Se hai clonato dati di produzione in un branch potresti estrarre un dump di quel database e rigiocartelo da solo, ma a quel punto quello che ti protegge è il dump, non il branch.

Che fine fa il mio branch quando faccio il merge della pull request?

Un branch di preview viene cancellato. Supabase descrive i branch di preview come effimeri e dice che vengono cancellati automaticamente quando una pull request viene mergiata o chiusa. I branch persistenti sono l'altro tipo, pensati per staging o QA, e quelli non spariscono alla chiusura della pull request. Quindi se un branch tiene l'unica copia di qualcosa che ti interessa, l'impostazione di default la butta il giorno in cui il lavoro finisce.

Il branching costa di più?

Sì. Supabase offre il branching sui piani a pagamento e lo fattura per branch e per ora, sopra il tuo abbonamento. Leggi la tariffa attuale sulla loro pagina dei prezzi invece che qui, perché è loro e possono cambiarla. La versione pratica: un branch persistente lasciato acceso è un secondo progetto Supabase che paghi per ogni ora in cui esiste.

Scritto da

Vlad Tkachenko

Fondatore di Reeve

Passo le giornate a guardare app costruite con Lovable, Bolt, v0, Cursor e Replit, e la breve lista di errori che vi ricompaiono di continuo.

Altro sull'autore

Da leggere dopo

Non sai come sta messa la tua app?

Esegui una scansione gratuita e ottieni un voto chiaro da A a F in una ventina di secondi. Senza account e senza carta.

Scansiona la tua app gratis

Controllo esterno automatizzato, non un audit completo. L'assenza di risultati non è una garanzia di sicurezza.