Dopo che hai fatto il backup come admin responsabile del database, arriva il momento della verità: il ripristino dei dati. Ed ecco che entra in scena il protagonista di questo episodio — il comando pg_restore. Se pg_dump era il tuo supereroe per creare i backup, allora pg_restore è il suo compagno che riporta in vita i dati dai backup creati.
pg_restore viene usato per ripristinare dati da file creati con pg_dump nei formati binari (custom o directory). Se per qualche motivo il tuo database si è corrotto, oppure vuoi migrare i dati su un nuovo server, questo strumento diventa il tuo alleato indispensabile.
Perché ti serve pg_restore:
- Ti permette di ripristinare sia l'intero database che solo alcune sue parti (schema, tabelle, dati).
- È uno strumento potente per scenari di ripristino complessi, dove vuoi controllare ogni dettaglio del processo.
Sintassi base del comando
Lavorare con pg_restore parte dalla sintassi base del comando:
pg_restore -U username -d database_name backup_file.dump
Parametri del comando:
-U username: specifica il nome utente PostgreSQL per la connessione.-d database_name: il nome del database dove verranno ripristinati i dati.backup_file.dump: il file di backup creato prima conpg_dumpin formatocustomodirectory
Per esempio, se vuoi ripristinare il database university dal file backup.dump come utente postgres, il comando sarà così:
pg_restore -U postgres -d university backup.dump
Lanciando questo comando pg_restore partirà con il processo di ripristino e riporterà i dati nel database!
Tipi di backup e loro compatibilità
Non tutti i backup sono uguali. Forse ricordi che quando creavi il backup con pg_dump potevi scegliere diversi formati. Alcuni sono compatibili con pg_restore, altri no.
| Formato backup | Descrizione | Supportato da pg_restore |
|---|---|---|
plain (testuale) |
Script SQL che contiene i comandi di ripristino. | ❌ No |
custom |
Backup compresso nel formato proprietario di PostgreSQL. | ✅ Sì |
directory |
Backup salvato come directory con più file. | ✅ Sì |
tar |
Archivio in formato TAR. | ✅ Sì |
Attenzione: per i backup testuali (plain) non puoi usare pg_restore. Questi file si ripristinano manualmente con il comando psql. Per esempio:
psql -U username -d database_name -f backup.sql
Flessibilità di pg_restore: parametri di ripristino
Uno dei motivi principali per cui pg_restore è così popolare è la sua flessibilità. Puoi ripristinare non solo l'intero database, ma anche solo alcune parti.
Ripristino della struttura dei dati. Se vuoi ripristinare solo la struttura del database (schemi delle tabelle, indici, trigger ecc.), usa il flag --schema-only:
pg_restore -U postgres -d university --schema-only backup.dump
Utile se vuoi analizzare la struttura del database o creare una copia "vuota".
Ripristino solo dei dati. Se ti interessano solo i dati (senza la struttura), usa il parametro --data-only:
pg_restore -U postgres -d university --data-only backup.dump
Questo approccio è utile se la struttura esiste già, ma vuoi ripristinare il contenuto delle tabelle.
Pulizia prima del ripristino. A volte tabelle o schemi esistono già nel database. Per eliminarli prima del ripristino, usa il flag --clean:
pg_restore -U postgres -d university --clean backup.dump
Con questo parametro pg_restore prima cancellerà gli oggetti esistenti e poi ripristinerà i dati dal backup.
Filtraggio degli oggetti. pg_restore ti permette di scegliere quali oggetti dal backup vuoi ripristinare. Per questo si usa il flag --table:
pg_restore -U postgres -d university --table=students backup.dump
Questo esempio ripristinerà solo la tabella students.
Output SQL in console
Se vuoi vedere cosa verrà eseguito durante il ripristino, ma senza modificare subito il database, usa il flag --list:
pg_restore -l backup.dump
E per ottenere i comandi SQL testuali che verranno eseguiti, aggiungi --verbose:
pg_restore -U postgres --verbose --schema-only backup.dump
Esempi di ripristino
- Ripristino completo del database.
Lo scenario più tipico: vuoi ripristinare completamente il database dal backup:
pg_restore -U postgres -d university backup.dump
- Ripristino di una tabella specifica.
Per esempio, se hai perso i dati solo dalla tabella courses, ripristinala separatamente:
pg_restore -U postgres -d university --table=courses backup.dump
- Ripristino dello schema del database.
Per ripristinare solo la struttura delle tabelle (senza dati):
pg_restore -U postgres -d university --schema-only backup.dump
- Ripristino con ricreazione degli oggetti.
Se vuoi sovrascrivere i dati esistenti:
pg_restore -U postgres -d university --clean backup.dump
Errori tipici durante il ripristino e come evitarli
Incompatibilità di versione. Se crei il backup con una versione di PostgreSQL e provi a ripristinarlo su un'altra (soprattutto più vecchia), potresti incontrare errori di incompatibilità. Soluzione: cerca di usare la stessa versione di PostgreSQL sia per il backup che per il ripristino.
Errore "Ruolo non esiste". Se nel backup ci sono ruoli (utenti) che non esistono sul server di ripristino, riceverai questo errore. Soluzione: crea prima i ruoli necessari sul nuovo server.
Errore "Tabella già esistente". Questo errore si verifica se provi a ripristinare una tabella che esiste già. Usa
--cleanper evitare conflitti.
GO TO FULL VERSION