Come creare un backup di una singola tabella in un database Postgres?


160

C'è un modo per creare un backup di una singola tabella all'interno di un database usando Postgres? E come? Funziona anche con il comando pg_dump?

Risposte:


212

Utilizzare --tableper dire pg_dumpquale tabella deve eseguire il backup:

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname

9
E come ripristinare quel file di backup. (.backup), l'ho usato pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"ma è uscito:pg_restore: [tar archiver] corrupt tar header found in --
Anderson Dorregaray Linares il

13
psql -U username -d database -1 -f your_dump.sql
rnaud

5
cosa volevi dire: abstract_file_path?
bandungeuy,

3
Non sono sicuro del motivo per cui questa risposta è stata votata, le persone fanno clic su +1 senza ispezionare le cose da sole o provare. Il problema con questa risposta, che la rende del tutto inutile, è che la soluzione / i comandi forniti non esportano le sequenze create sulla tabella (chiave primaria), e quindi l'importazione fallisce. Non sono a conoscenza di un singolo database PG di produzione ovunque che non utilizza chiavi primarie con sequenze. È una mezza risposta, non riesce a rispondere a fondo alla domanda e richiede ulteriore lavoro per esportare / importare una singola tabella.
user10664542

1
con un tocco leggermente diverso sudo ho finito con un errore di autorizzazione sul dump del file (abbastanza logico poiché postgres dell'utente non ha accesso in scrittura sulle mie directory) e ho avuto un errore di bandiera sconosciuto per --ignore-version. La risposta di Prashant Kumar, che è più semplice, ha funzionato per me.
JL Peyret,

84

Se sei su Ubuntu,

  1. Accedi al tuo utente postgres sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

Assicurarsi che si sta eseguendo il comando in cui l' postgresutente ha i permessi di scrittura (Esempio: /tmp)

modificare

Se desideri scaricare il file .sql in un altro computer, potresti dover considerare di saltare le informazioni sul proprietario che vengono salvate nel file .sql.

Puoi usare pg_dump --no-owner -d <database_name> -t <table_name> > file.sql


1
Cosa succede se si desidera tutte le tabelle, senza dover specificare il nome di ciascuna?
Shekeine,

3
Basta rimuovere l'opzione -t! pg_dump -d <database_name> > file.sql
Sri Harsha Kappala,

4
Non so perché ma l'opzione -d non è valida per psql9.3 e il comando dato non funziona per me. Uno di questi è pg_dump -U username db_name -t table_name> fileName .
Serkan Kucukbay,

pg_dump -t <table_name> <database_name> > file.sql
Sriram,

@ user10664542: leggere il manuale, in particolare questa sezione: "A tal fine, la" tabella "include viste, viste materializzate, sequenze e tabelle esterne".
Frank Heikens,

42

pg_dump -h localhost -p 5432 -U postgres -d mydb -t my_table> backup.sql

È possibile eseguire il backup di una singola tabella, ma suggerirei di eseguire il backup dell'intero database e quindi ripristinare qualsiasi tabella sia necessaria. È sempre bene avere il backup dell'intero database.

9 modi per usare pg_dump


Non sono sicuro del motivo per cui questa risposta è stata votata, le persone fanno clic su +1 senza ispezionare le cose da sole o provare. Il problema con questa risposta, che la rende del tutto inutile, è che la soluzione / i comandi forniti non esportano le sequenze create sulla tabella (chiave primaria), e quindi l'importazione fallisce. Non sono a conoscenza di un singolo database PG di produzione ovunque che non utilizza chiavi primarie con sequenze. È una mezza risposta, non riesce a rispondere a fondo alla domanda e richiede ulteriore lavoro per esportare / importare una singola tabella.
user10664542

come notato sopra, ho un forte sospetto che l'utente 10664542, senza alcuna risposta di SO postgres al suo nome, sia fuori di qui. mentre la sequenza porta ulteriori complicazioni, ci sono abbastanza voti sulle risposte simili che la gente probabilmente li ha fatti funzionare anche se hanno dovuto regolare la sequenza dopo il fatto. se avessi dovuto ripristinare il mio dump, avrei cercato i modi per aggiornare l'ultimo ID della sequenza da a max(id)sul mio tavolo. questa è la risposta per cui ha funzionato e sono fiducioso, guardando il sql generato, che avrei potuto ripristinarlo.
JL Peyret,

9

Se si preferisce un'interfaccia utente grafica, è possibile utilizzare pgAdmin III (Linux / Windows / OS X). Basta fare clic destro sulla tabella di vostra scelta, quindi "backup". Creerà un pg_dumpcomando per te.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


2

Come aggiunta alla risposta di Frank Heiken, se si desidera utilizzare INSERTdichiarazioni anziché copy from stdin, è necessario specificare la --insertsbandiera

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename --inserts dbname

Si noti che ho lasciato fuori la --ignore-versionbandiera, perché è obsoleta.


Non sono sicuro del motivo per cui questa risposta è stata votata, le persone fanno clic su +1 senza ispezionare le cose da sole o provare. Il problema con questa risposta, che la rende del tutto inutile, è che la soluzione / i comandi forniti non esportano le sequenze create sulla tabella (chiave primaria), e quindi l'importazione fallisce. Non sono a conoscenza di un singolo database PG di produzione ovunque che non utilizza chiavi primarie con sequenze. È una mezza risposta, non riesce a rispondere a fondo alla domanda e richiede ulteriore lavoro per esportare / importare una singola tabella.
user10664542
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.