2016-05-04 16 views
8

(PostgreSQL) 9.4.4Escludere Tabella durante pg_restore

Qualcuno sa come escludere un tavolo quando si fa un pg_restore? Posso trovare come farlo quando si fa un pg_dump. Tuttavia non sono io quello che fa la discarica e non posso escluderli.

Ci sono 2 tabelle nel dump che sono veramente grandi e richiedono un tempo infinito quando eseguo un ripristino, quindi voglio saltarle.

risposta

3

pg_restore non ha un parametro di tabella di esclusione, quello che ha è un parametro di tabella di inclusione.

tavolo -t

--table = tavolo

Ripristina definizione e/o dati di solo tabella denominata. È possibile specificare più tabelle con più opzioni -t. Questo può essere combinato con l'opzione -n ​​per specificare uno schema.

Se si dispone di un numero elevato di tabelle, richiede un po 'di digitazione, ma consente di escludere tabelle specifiche semplicemente lasciando il proprio nome fuori dalla lista.

+1

Grazie. Sì, abbiamo un sacco di tavoli ma sto facendo un rake task per automatizzare questo, quindi dovrò farlo una sola volta. Potrebbe scorrere i tavoli e avere un elenco di esclusione delle 2 tabelle. – covard

17

Ho avuto lo stesso problema. Un lungo elenco di tabelle e voglio escludere i dati da alcune tabelle.

Quello che ho fatto è stato il seguente:

Run

pg_restore -l $pgdump_file > restore.pgdump.list 

aperta che restore.pgdump.list file in un editor, e inserire un ; davanti alla linea di dire

;2429; 0 27550 TABLE DATA public <table_to_explore> <database> 

Dopo aver salvato il file, ora può essere utilizzato per l'importazione, dove tutte le righe che iniziano con ; vengono ignorate.

pg_restore -L restore.pgdump.list | psql 

Si potrebbe fare un one-liner per aggiungere ; di fronte a linee che hanno un nome tabella specifica, se si desidera ignorare completamente una tabella specifica.

man pg_restore ne parla anche in un esempio alla fine della documentazione.

+0

Grazie, che salvavita! Come indicato in 'man pg_restore', dopo aver modificato il file' restore.pgdump.list' (dal tuo esempio), puoi chiamare 'pg_restore -L db.list db.dump' (nel tuo esempio, chiami 'pg_restore' e lo colleghiamo a' psql' - tuttavia, non si specifica il percorso del file dump ..?) –

+0

Si noti che questo mi ha salvato perché stavo cercando di escludere 2 tabelle da un elenco di 99 tabelle che erano importato. 'pg_restore' non consente di specificare le tabelle da escludere durante l'importazione, quindi ho dovuto chiamarlo:' pg_restore -t a_table -t another_table -t yet_another_table', ecc. Il tentativo di chiamarlo con 97 '-t' ha rotto con un messaggio "too many arguments" ... :-) La tua soluzione 'restore.pgdump.list' ha funzionato !! –

+0

Questo è stato molto utile! Avevo bisogno di escludere solo i dati da una singola tabella: 'report'.Sono stato in grado di eseguire un 'grep -v' in linea durante la creazione del file di elenco. '' 'pg_restore -l $ pgdump_file | grep -v "TABLE DATA public reports"> restore.pgdump.list''' –