Consigli Tecnologici: Come posso eseguire il backup e ripristinare il database Postgres?
Karan Singh
19 giu 2013
1 min read

Conclusioni principali
I backup di PostgreSQL possono riguardare una singola tabella, un singolo database o tutti i database a seconda delle tue esigenze.
pg_dumpcrea un file di testo SQL contenente il DDL e i dati necessari per ricreare la tabella o il database di destinazione.pg_dumpalleffettua il backup di ogni database sull'istanza di Postgres.Il ripristino viene eseguito con
psql, che esegue il dump SQL nel database di destinazione.I ripristini a livello di tabella richiedono di garantire che la tabella non esista già per evitare conflitti.
Quando si effettua il backup di singole tabelle, è importante considerare le dipendenze relazionali.
I dump possono essere effettuati da locale e ripristinati su istanze di Postgres remote.
I backup includono i comandi
CREATE,ALTEReCOPYa seconda di ciò che viene esportato.Una strategia di backup appropriata dipende dalla comprensione delle relazioni tra le tabelle, dall'uso dello schema e dagli ambienti di distribuzione.
Assicurati sempre dell'integrità dei dati effettuando backup che includano le tabelle referenziate quando necessario.
Q&A Highlights
Cosa fa effettivamente pg_dump?
pg_dumpgenera un file SQL basato su testo contenente l'intero set di comandi necessari per ricreare una tabella o un database esattamente come esisteva al momento del backup.Posso eseguire il backup di una sola tabella invece di un intero database?
Sì. Usa
pg_dump --table TABLENAMEper esportare una tabella specifica. Se esistono tabelle con lo stesso nome in schemi diversi, utilizza--schemaper specificare quello corretto.Dovrei preoccuparmi delle tabelle correlate quando faccio il backup di una singola tabella?
Assolutamente. PostgreSQL è relazionale, quindi altre tabelle potrebbero fare riferimento a quella che stai eseguendo il backup. Se ripristini solo una tabella senza le altre correlate, potresti compromettere l'integrità referenziale.
Come posso eseguire il backup di un intero database?
Esegui un comando come:
pg_dump -U <user> <database> -f <output.sql>Questo esporta tutte le tabelle, le definizioni dello schema, gli indici e i dati per quel database.
Cosa fa pg_dumpall?
pg_dumpallesegue il backup di ogni database sul server in un unico file SQL. È utile quando si esegue la migrazione o il snapshot di un'intera istanza di Postgres.Posso ripristinare una tabella in un database esistente?
Sì. Usa
psql -U <user> -f <file.sql> <database>.Ma assicurati che la tabella non esista già — altrimenti riceverai errori di "già esistente" durante il ripristino.
Cosa succede durante un ripristino completo del database?
Il file di ripristino esegue:
CREATE TABLEALTER TABLECOPY(per i dati della tabella)
riportando il database al suo stato esatto al momento del dump.
Posso ripristinare su un server diverso da quello da cui ho eseguito il backup?
Sì. I dump sono portabili. Puoi effettuare un backup localmente e ripristinarlo su un'istanza remota di Postgres, a condizione che le versioni siano compatibili.
Il comando pg_dump influisce sul database in esecuzione?
No. Funziona tramite query SQL e non blocca l'intero database. Cattura in modo sicuro uno snapshot coerente.
Come posso ripristinare tutti i database da un file pg_dumpall?
Usare:
psql -U <user> -f all_dump.sqlQuesto ricrea ogni database trovato nel dump.
Prima, un disclaimer. Questo post fornisce una guida generale su come effettuare il backup di una tabella del database Postgres. Gli esempi forniti non si riferiscono a nessuna tabella o database specifico. Se stai cercando di effettuare il backup di una tabella specifica, dovresti anche fare il backup delle tabelle che fanno riferimento alle tabelle originali. Poiché Postgres è un database relazionale, ci saranno sempre riferimenti tra un numero di tabelle.
Questo è un documento ‘come fare’ che fornisce solo comandi di esempio, come viene effettivamente fatto dipende esclusivamente dalla persona che lo fa e dai casi d'uso specifici. Mantieni sempre l'integrità dei dati che stai cercando di fare il backup. Effettuare il backup dell'intero database è sempre un'opzione sicura, ma quando si effettuano backup di tabelle specifiche bisogna essere attenti.
SQL-dump/pg_dump:
L'idea dietro il metodo SQL-dump è di generare un file di testo con comandi SQL che, una volta reimmessi nel server, ricreeranno il database nello stesso stato in cui si trovava al momento del dump. PostgreSQL fornisce il programma di utilità pg_dump per questo scopo.
pg_dump è uno strumento efficace e completo per effettuare backup del database Postgres e utilizzare i backup per ripristinare il database Postgres. Tuttavia, non è limitato solo al Database. Possiamo usare pg_dump per fare il backup di tabelle e poi usarlo per ripristinare anche singole tabelle. Usando pg_dump puoi fare il backup del database locale e ripristinarlo su un database remoto.
Come eseguire il Backup del Database Postgres:
How to Restore Postgres Database
Ripristina una tabella Postgres:
$ /opt/msys/3rdParty/bin/psql -U ecuser -f ms_table.sql peIl comando sopra installerà la tabella che è stata salvata nel file ms_table.sql nel database ‘pe’. Assicurati che questa tabella non esista già, altrimenti vedrai una serie di errori di ‘esiste già’. Questo comando crea la tabella ed esporta tutti i dati nella nuova tabella creata.
Ripristina un Database Postgres:
$ /opt/msys/3rdParty/bin/psql -U ecuser -d pe -f pe_dump.sqlSimile al ripristino della tabella, possiamo usare il comando sopra per ripristinare l'intero database. Qui stiamo ripristinando il database ‘pe’ utilizzando il file pe_dump.sql che abbiamo creato durante il backup del database nella sezione di Backup sopra.
Ripristina tutti i Database:
$ /opt/msys/3rdParty/bin/psql -u ecuser -f all_dump.sqlRipristina tutti i database utilizzando il comando sopra. ‘all_dump.sql’ era il file che è stato creato utilizzando
pg_dumpall. Il comando sopra ci darà tutti i database di Postgres nello stato esatto in cui erano quando è stato eseguito un dump dal server di database originale.



