CodeGym /Corsi /SQL SELF /Ripristino dei dati con pg_restore

Ripristino dei dati con pg_restore

SQL SELF
Livello 43 , Lezione 3
Disponibile

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 con pg_dump in formato custom o directory

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

  1. Ripristino completo del database.

Lo scenario più tipico: vuoi ripristinare completamente il database dal backup:

pg_restore -U postgres -d university backup.dump
  1. 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
  1. Ripristino dello schema del database.

Per ripristinare solo la struttura delle tabelle (senza dati):

pg_restore -U postgres -d university --schema-only backup.dump
  1. 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 --clean per evitare conflitti.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION