Backups
Come ripristinare un backup Supabase, e cosa si rompe dopo
Come ripristinare un backup Supabase dalla dashboard o da un file di dump, che cosa sostituisce il ripristino e perché la tua app può restare rotta lo stesso.

In breve
- Per ripristinare un backup Supabase o riporti indietro il progetto dalla dashboard, oppure rigiochi un file di dump dentro un progetto con psql. Quale dei due hai a disposizione è stato deciso prima di oggi.
- Copia il database com’è adesso prima di ripristinare qualsiasi cosa. Un ripristino sostituisce le tabelle contenute nella copia, quindi ogni riga scritta da allora se ne va con loro.
- L’esito abituale è un ripristino che riesce e un’app ancora rotta, perché i file caricati e gli account di accesso non sono mai stati nella copia del database.
Qualcosa nel tuo database è andato storto e, per una volta, ne hai una copia. Adesso stai guardando un pulsante che non hai mai premuto, su un progetto con utenti veri dentro, cercando di capire che cosa sta per fare a loro.
Ecco la parte che guida dopo guida si lascia indietro. Quasi tutti gli articoli su come ripristinare un backup Supabase finiscono nel momento in cui il ripristino si conclude, ed è lì che comincia la maggior parte dei guai. L’esito abituale non è un ripristino che fallisce. È uno che riesce e lascia l’app rotta lo stesso, perché un backup del database non ha mai contenuto altro che il database.
Aiuta smettere di immaginarlo come recuperare i tuoi dati. Un ripristino scambia il tuo database con uno più vecchio, più vicino al sostituire un intero schedario che al rimettere a posto una singola cartellina. Tutto quello che segue discende da qui.
Come ripristino un backup Supabase?
Tre strade, e quale di esse ti sia aperta oggi è stato deciso prima di oggi.
| Strada | Che cosa fa | Che cosa serve |
|---|---|---|
| La dashboard di Supabase | Sostituisce il database di quel progetto con una copia notturna datata che scegli tu | Un piano a pagamento, e la copia ancora dentro la tua finestra |
| Point-in-time recovery | Riporta l’intero progetto al minuto che indichi | Il componente PITR, acquistato prima di ciò da cui ti stai riprendendo |
Un file di dump, rigiocato con psql | Carica il file nel progetto che indichi, compresi quelli appena creati | Il file, e la password del database del progetto di destinazione |
Le prime due rimettono i tuoi dati dov’erano già. La terza è l’unica che può metterli altrove, ed è quello che ti serve il giorno in cui il problema è il tuo account e non i tuoi dati.
Se non sei sicuro di quale hai, il piano Supabase su cui stai decide le prime due e controllarlo richiede circa due minuti.
Copia quello che hai adesso, prima di ripristinare qualsiasi cosa
Prendi per prima cosa una copia del database nel suo attuale stato rotto. È un solo comando, ed è ciò che rende reversibile ogni decisione successiva.
pg_dump "postgresql://…la tua stringa di connessione…" \
--clean --if-exists --no-owner \
--file before-restore-2026-08-24.sql
Ci sono due motivi, e il secondo di solito lo si impara dopo.
Il primo è che un ripristino è una sostituzione. Le tabelle nella copia tornano esattamente com’erano, quindi ogni riga scritta da allora se ne va con loro. Una cliente che si è registrata stamattina è una riga che stai per cancellare apposta.
Il secondo è che il tuo database rotto resta l’unico posto in cui una parte dei tuoi dati esiste ancora. Se la copia è di martedì e il danno è avvenuto giovedì, tutto ciò che è nato mercoledì è davanti a te proprio adesso e da nessun’altra parte. Ripristina sopra e sparisce una seconda volta, stavolta per mano tua e non per l’incidente.
Mentre lavori, spegni tutto ciò che scrive righe nuove. Il ragionamento è lo stesso di dopo qualunque cancellazione: il divario tra la copia e adesso costa di più quanto più a lungo l’app continua a riempirlo.
Ripristinare dalla dashboard di Supabase
Questo sostituisce il database del tuo progetto con la copia che scegli, e il progetto non è raggiungibile mentre l’operazione va avanti.
Apri il progetto con cui parla la tua app, vai su Database e poi Backups, e scegli la copia datata. I passaggi esatti leggili nella documentazione sui backup di Supabase, perché la dashboard viene riorganizzata e questa pagina non se ne accorgerà.
Quanto ci mette dipende dalla dimensione del tuo database, ed è la risposta di Supabase stessa. Metti un avviso di manutenzione prima di cominciare.
Il point-in-time recovery è la stessa operazione con una manopola più fine. Invece di scegliere la notte scorsa indichi un minuto, e il progetto torna indietro fin lì. Supabase lo descrive come distruttivo, ed è la parola giusta. Le loro note di supporto aggiungono che un ripristino point-in-time non può partire finché non vengono rimossi gli slot di replica e le sottoscrizioni esistenti. Quindi se qualcosa nella tua app segue le modifiche del database man mano che avvengono, quello è un passaggio da fare prima invece che un errore in cui inciampare a metà.
Nessuna delle due strade può mettere i tuoi dati in un progetto diverso. Entrambe agiscono sul progetto in cui ti trovi, il che significa che nessuna delle due è disponibile il giorno in cui la cosa rotta è il tuo accesso all’account.
Ripristinare un file di dump con psql
Punti psql a un progetto e ci rigiochi dentro il file. Quel progetto può
essere quello che avevi, o uno appena creato su un account aperto stamattina.
psql -d "postgresql://…stringa di connessione del progetto destinazione…" \
--variable ON_ERROR_STOP=1 \
--single-transaction \
--file backup-2026-08-09.sql
Due di quelle opzioni vale la pena capirle, perché il comportamento predefinito di psql è quello sorprendente.
ON_ERROR_STOP=1 si ferma al primo errore. Senza, psql legge l’errore, lo
stampa e tira dritto alla riga successiva, così un file che è fallito alla riga
400 su 30.000 finisce comunque su un prompt che sembra un successo, sopra un
database a cui manca tutto quello che veniva dopo quella riga.
--single-transaction avvolge l’intero file in una sola operazione, così un
fallimento lascia il database com’era invece che a metà.
Poi le credenziali, il punto in cui molti si bloccano. Rigiocare un backup
significa scrivere, quindi serve qualcosa che possa scrivere. Una chiave anon
non ce la fa e nemmeno una di sola lettura. Quello che psql vuole è la
password del database del progetto di destinazione, che sta nelle impostazioni
del tuo progetto Supabase, sotto Database.
Quello che torna dipende da cosa c’è nel file, e questo è stato deciso quando il
dump è stato preso. I tuoi account di accesso sono la parte da controllare
prima di farci affidamento. Vivono in uno schema chiamato auth accanto alle
password cifrate, e Supabase documenta
il loro spostamento tra progetti
come un lavoro con passaggi propri. Se stai ripristinando in un progetto nuovo e
vuoi che le persone entrino con la password che hanno già, leggi quella pagina
prima di iniziare.
E un progetto nuovo ha un URL nuovo e chiavi nuove. La tua app punta ancora a quello vecchio finché non lo cambi, che è la prima riga della sezione successiva.
Ha ripristinato, e l’app è ancora rotta
Questo è l’esito normale. È quasi sempre una di cinque cose, e la prima costa un minuto.
| Che cosa vedi | Che cosa è successo davvero | Che cosa fare |
|---|---|---|
| L’app si carica e ogni elenco è vuoto | Sta ancora parlando col progetto vecchio | Metti URL e chiave pubblicabile del progetto nuovo nelle impostazioni della tua app, poi ridistribuisci |
| Immagini, avatar e caricamenti sono spariti | I file vivono in Storage, fuori dal database. Le righe ripristinate contengono solo il percorso di ogni file | Ripristina i tuoi file dalla loro copia. Nessun backup del database li contiene, su nessuna strada |
| Nessuno riesce ad accedere | Gli account vivono nello schema auth, e se fossero nel file dipende da come è stato preso il dump | Segui la guida di migrazione auth di Supabase, o ripristina da una copia che includa quello schema |
| Le pagine si leggono bene e salvare fallisce | Il database è tornato leggibile e non scrivibile | Crea una riga dall’app prima di considerarlo finito. Il paragrafo qui sotto ha il dettaglio |
| Una funzione è rotta e la sua tabella sta bene | Le edge function vivono nel tuo repository, fuori dal database | Ridistribuiscile dal tuo builder o dal tuo repo |
La quarta merita l’attenzione. Il permesso di leggere e quello di scrivere vengono concessi separatamente, e un ripristino può prendere l’uno e mancare l’altro. Così le pagine si riempiono dei tuoi dati, sembra tutto recuperato, e poi la prima persona che invia un modulo riceve un errore. Guardare l’app non te lo mostrerà mai, perché guardare è leggere.
Come capire se il ripristino ha funzionato davvero
Accedi, trova una riga che sai nominare, e poi scrivine una. In quest’ordine, e l’ultima è la verifica che conta.
- Accedi dall’app come farebbe un utente, invece di aprire l’editor di tabelle di Supabase. Così provi l’app, la connessione e gli account di accesso in un colpo solo.
- Trova una riga che ricordi. Un ordine preciso, un cliente col suo nome, l’ultima cosa aggiunta prima che si rompesse. "I dati sembrano esserci" è una sensazione; una riga che sai nominare è una verifica.
- Confronta un conteggio con quello che ti aspettavi. Apri la tua tabella più grande nell’editor di Supabase e leggi il numero di righe. Un ripristino fermatosi a metà di solito si vede qui, come un numero troppo piccolo.
- E poi scrivi qualcosa. Crea una riga come fa un utente: fai un ordine di prova, salva un profilo, pubblica un commento. È la verifica che fallisce quando le altre tre passano, ed è l’unica cosa che dimostra che il ripristino è finito.
- Apri qualcosa che ha caricato un utente. Se la tua app ha immagini o allegati, cliccane uno. Se siano tornati i tuoi file è una domanda diversa da se siano tornate le tue righe.
Che cosa fare adesso
Cosa fare
- Copia il database com’è adesso, prima di ripristinare qualsiasi cosa. È un
pg_dump, ed è ciò che rende reversibile la decisione successiva. - Spegni tutto ciò che scrive righe nuove mentre lavori, perché un ripristino cancella qualunque cosa sia arrivata dopo la copia.
- Scegli la strada in base al problema. Un ripristino dalla dashboard sistema i tuoi dati; solo un file di dump rigiocato con
psqlpuò portarli in un progetto nuovo. - Se usi
psql, impostaON_ERROR_STOP=1. Un ripristino che si è arreso a metà in silenzio è identico a uno riuscito. - Verifica il ripristino scrivendo, non leggendo. Accedi, trova una riga che sai nominare, poi creane una dall’app.
- Tratta i file caricati e gli account di accesso come lavori a parte. Nessuno dei due è finito quando finisce il database.
Prima di chiudere questa scheda, scopri se hai qualcosa da cui ripristinare, e dove si trova. Quella singola risposta decide quale metà di questo articolo ti servirà mai. La checklist di sicurezza in 10 minuti lo copre insieme al resto di ciò che vale la pena confermare su un’app appena lanciata, e la guida alla sicurezza di Supabase passa in rassegna cosa di solito resta aperto.
Che cosa fa Reeve Care il giorno in cui ripristini
La copia esiste già, è già stata riletta e verificata, e sta fuori dal tuo account Supabase. Questo trasforma l’ora descritta sopra in una scelta su quale copia, e in un pulsante.
Quattro cose che cambia rispetto a questo articolo in particolare.
La copia è verificata prima che ti serva. Ogni backup viene riletto e contato rispetto a quello che è entrato, e la data che vedi nella tua dashboard è quella dell’ultima copia che ha superato il controllo, non dell’ultimo tentativo. Il ripristino a metà contro cui mette in guardia questo articolo è un problema che troviamo in un pomeriggio qualunque, prima che diventi tuo.
La copia di sicurezza non è un passaggio da ricordare. Premere ripristina prende prima una copia fresca dello stato attuale, così il ripristino stesso si può annullare.
Tornano anche i tuoi file caricati, una volta che colleghi i tuoi bucket di Storage. È la riga della tabella qui sopra che altrimenti non ha una buona risposta.
La chiave del database che teniamo può solo leggere. Un ripristino deve scrivere, quindi chiede la password del tuo database ogni volta e non ne conserva nessuna. La chiave opzionale per i tuoi file può scrivere, perché Supabase non emette una chiave di sola lettura per Storage, e la pagina in cui la consegni lo dice prima che tu lo faccia.
I limiti stanno nella stessa frase, perché è meglio conoscerli prima di pagare che durante un disservizio:
- Funziona con Supabase e oggi con nient’altro.
- Ripristini a una copia che esiste, non a un minuto qualsiasi che nomini. Nel caso peggiore perdi un intervallo, che è fino a una notte sul piano d’ingresso e meno sui due sopra.
- Gli account di accesso non vengono mai toccati. Nessuno viene disconnesso, cancellato o riportato indietro.
Tieni comunque accesi i backup di Supabase. Due copie in due posti è tutta l’idea, e la più economica delle due è già nel tuo piano. Che cosa copre ogni piano Care è sulla home page.
Se preferisci non pagare per niente di tutto questo, tutto in questo articolo
funziona lo stesso. Un pg_dump con una cadenza che rispetti davvero, tenuto in
un posto che perdere il tuo account Supabase non si porterebbe via, più un
ripristino di prova a trimestre, ti porta quasi fino in fondo.
Le tre strade e cosa si lascia indietro ciascuna
lo racconta senza un discorso di vendita.
Il ciclo completo è disegnato passo per passo sulla pagina dei backup Supabase: la copia che lascia Supabase, il controllo che la segue, e il pulsante che la rimette a posto.
FAQ
Come ripristino un backup Supabase?
Ci sono tre strade. Dalla dashboard scegli una copia notturna datata e Supabase sostituisce con quella il database di quel progetto, e serve un piano a pagamento. Il point-in-time recovery riporta l’intero progetto al minuto che indichi, e serve il componente PITR acquistato in anticipo. Oppure rigiochi tu stesso un file di dump con psql, l’unica strada capace di portare i tuoi dati in un progetto diverso su un account diverso. Prima di ognuna delle tre, prendi una copia del database com’è adesso.
Ripristinare un backup cancella i dati aggiunti da quando è stato preso?
Sì. Un ripristino è una sostituzione e non una fusione: le tabelle nella copia tornano esattamente com’erano in quel momento, e tutto ciò che vi è stato scritto dopo se ne va. Comprese righe perfettamente sane. È il motivo per fermare la scrittura della tua app prima di iniziare, e il motivo per tenere una copia dello stato attuale, così da poter rimettere sopra le righe buone più recenti se poi decidi di volerle.
Il ripristino è finito ma nella mia app mancano le immagini. Perché?
Perché i tuoi file non sono mai stati nel backup. Supabase Storage sta fuori dal tuo database Postgres, quindi un backup del database contiene la riga che punta a ogni file e nessuno dei file. Ripristinare ti lascia una tabella piena di collegamenti a cose che non ci sono più, o che stanno in un progetto che non usi più. Storage va copiato e ripristinato a parte, qualunque strada di backup tu abbia preso.
Posso ripristinare un backup Supabase in un progetto diverso?
Solo con un file di dump che possiedi tu. Il ripristino dalla dashboard e il point-in-time recovery agiscono entrambi sul progetto in cui ti trovi, quindi nessuno dei due aiuta il giorno in cui il problema è che non riesci più a entrare nell’account. Un file pg_dump rigiocato con psql entra nel progetto che indichi tu, compreso uno appena creato su un account nuovo. È questa la differenza il giorno che conta.
I miei utenti dovranno registrarsi di nuovo dopo un ripristino?
Dipende da se gli account di accesso erano nella copia. Vivono in uno schema del database chiamato auth, insieme alle password cifrate, e Supabase documenta il loro spostamento tra progetti come un lavoro con passaggi propri e non come qualcosa che viaggia insieme alle tue tabelle. Se stai ripristinando in un progetto nuovo, leggi quella guida prima di iniziare. Un ripristino dentro lo stesso progetto di solito lascia l’accesso intatto.
Quanto tempo richiede un ripristino Supabase?
Supabase dice che dipende dalla dimensione del database e da quanti dati vanno elaborati, che è la risposta onesta e non quella utile mentre aspetti. Dai per scontato che il progetto sia irraggiungibile per tutta la durata e metti un avviso di manutenzione prima di iniziare. Le loro note di supporto aggiungono che un ripristino point-in-time non può partire finché non vengono rimossi gli slot di replica e le sottoscrizioni esistenti, quindi controlla prima quello se qualcosa nella tua app segue le modifiche del database in tempo reale.