Erstellen eines Datenbank-Dumps für bestimmte Tabellen und Einträge Postgres


91

Ich habe eine Datenbank mit Hunderten von Tabellen. Ich muss nur bestimmte Tabellen exportieren und Anweisungen für die Daten in eine SQL-Datei einfügen.

Die einzige Aussage, die ich kenne, um dies zu erreichen, ist

pg_dump -D -a -t zones_seq interway > /tmp/zones_seq.sql

Sollte ich diese Anweisung für jede Tabelle ausführen oder gibt es eine Möglichkeit, eine ähnliche Anweisung auszuführen, um alle ausgewählten Tabellen in eine große SQL-Größe zu exportieren. Der obige pg_dump exportiert das Tabellenschema nicht nur Einfügungen, ich brauche beide

Jede Hilfe wird geschätzt.

Antworten:


154

Direkt aus dem Handbuch : " Mehrere Tabellen können durch Schreiben mehrerer -t-Schalter ausgewählt werden "

Sie müssen also alle Ihre Tabellen auflisten

pg_dump --column-inserts -a -t zones_seq -t interway -t table_3 ... > /tmp/zones_seq.sql  

Beachten Sie, dass Sie bei mehreren Tabellen mit demselben Präfix (oder Suffix) auch Platzhalter verwenden können, um diese mit dem folgenden -tParameter auszuwählen :

" Außerdem wird der Tabellenparameter gemäß den gleichen Regeln, die von den \ d-Befehlen von psql verwendet werden, als Muster interpretiert. "


19
Der -T-Schalter ist der gleiche Weg, wird jedoch zum Ausschließen von Tabellen verwendet. Könnte nützlich sein, wenn Sie alle bis auf einen oder zwei Tische usw. benötigen
Scott Marlowe

4
Die -DOption scheint ab PG 9.1 verschwunden zu sein
Epigene

5
Die -DOption wurde in Version 8.4 entfernt . Sie müssen --column-insertsjetzt stattdessen verwenden.
mlovic

1
Versuchen Sie pg_dump --host 127.0.0.1 --port 5432 --username "<Benutzername>" --column-inserts --verbose --file "/ tmp / <filename.sql>" --table "^ <regex> * "<Tabellenname>"
Tharindu Jayasuriya

22

Wenn diese spezifischen Tabellen mit einem bestimmten regulären Ausdruck übereinstimmen, können Sie die Option regulärer Ausdruck in -t in pg_dump verwenden.

pg_dump -D -a -t zones_seq -t interway -t "<regex>" -f /tmp/zones_seq.sql <DBNAME>

Sie können beispielsweise Tabellen sichern, die mit "test" begonnen haben

pg_dump -D -a -t zones_seq -t interway -t "^test*" -f /tmp/zones_seq.sql <DBNAME>

3
Wenn es eine Regex wäre, sollte es nicht ^test.*stattdessen sein ^test*?
msrd0

5
Es ist kein regulärer Ausdruck, es verwendet die "Muster" von postgres, also sollte es wirklich so sein "test*": postgresql.org/docs/current/app-psql.html#APP-PSQL-PATTERNS
elliotcm

Es ist nicht trivial, Regex zu verwenden, da ein ungültiger regulärer Ausdruck generiert wird : Quantifiziereroperand ungültiger Fehler. Aber regulärer Ausdruck ist richtig ... Nur sehr einfache Regex sind gültig
Peter Krauss
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.