Wie erstelle ich eine Sicherung einer einzelnen Tabelle in einer Postgres-Datenbank?

160

Gibt es eine Möglichkeit, mit postgres eine Sicherung einer einzelnen Tabelle in einer Datenbank zu erstellen? Und wie? Funktioniert dies auch mit dem Befehl pg_dump?

Elitmiar
quelle

Antworten:

211

Verwenden Sie --tablediese Option, um anzugeben, pg_dumpwelche Tabelle gesichert werden muss:

pg_dump --host localhost --port 5432 --username postgres --format plain --verbose --file "<abstract_file_path>" --table public.tablename dbname
Frank Heikens
quelle
9
Und wie man diese Sicherungsdatei wiederherstellt. (.backup), ich habe verwendet, pg_restore --host localhost --port 5432 --username postgres --dbname "anydb" --table public.tablename -Ft --verbose "/path/filename.backup"aber es kam heraus:pg_restore: [tar archiver] corrupt tar header found in --
Anderson Dorregaray Linares
13
psql -U username -d database -1 -f your_dump.sql
Rnaud
5
Was hast du gemeint: abstract_file_path?
Bandungeuy
3
Ich bin mir nicht sicher, warum diese Antwort gewählt wurde. Die Leute klicken auf +1, ohne die Dinge selbst zu überprüfen oder zu versuchen. Das Problem bei dieser Antwort, das sie völlig unbrauchbar macht, besteht darin, dass die angegebenen Lösungen / Befehle keine in der Tabelle erstellten Sequenzen (Primärschlüssel) exportieren und der Import daher fehlschlägt. Mir ist nirgendwo eine einzige Produktions-PG-Datenbank bekannt, die keine Primärschlüssel mit Sequenzen verwendet. Es ist eine halbe Antwort, beantwortet die Frage nicht gründlich und erfordert zusätzliche Arbeit, um eine einzelne Tabelle zu exportieren / importieren.
user10664542
1
mit einer etwas anderen sudo-Wendung hatte ich einen Berechtigungsfehler im Dateidump (logisch genug, da der Benutzer postgres keinen Schreibzugriff auf meine Verzeichnisse hat) und ich hatte einen unbekannten Flag-Fehler für --ignore-version. Prashant Kumars Antwort, die einfacher ist, hat für mich funktioniert.
JL Peyret
84

Wenn Sie auf Ubuntu sind,

  1. Melden Sie sich bei Ihrem Postgres-Benutzer an sudo su postgres
  2. pg_dump -d <database_name> -t <table_name> > file.sql

Stellen Sie sicher , dass Sie den Befehl ausführen , wo der postgresBenutzer Schreibrechte besitzen (Beispiel: /tmp)

Bearbeiten

Wenn Sie die SQL-Datei auf einem anderen Computer sichern möchten, müssen Sie möglicherweise die Eigentümerinformationen überspringen, die in der SQL-Datei gespeichert werden.

Sie können verwenden pg_dump --no-owner -d <database_name> -t <table_name> > file.sql

Sri Harsha Kappala
quelle
1
Was ist, wenn Sie alle Tabellen möchten, ohne den Namen der einzelnen Tabellen angeben zu müssen?
Shekeine
3
Entfernen Sie einfach die Option -t! pg_dump -d <database_name> > file.sql
Sri Harsha Kappala
4
Ich weiß nicht warum, aber die Option -d ist für psql9.3 nicht gültig und der angegebene Befehl funktioniert bei mir nicht. Eine davon ist pg_dump -U Benutzername Datenbankname -t Tabellenname> Dateiname .
Serkan Kucukbay
pg_dump -t <table_name> <database_name> > file.sql
Sriram
@ user10664542: Bitte lesen Sie das Handbuch, insbesondere diesen Abschnitt: "Zu diesem Zweck enthält" Tabelle "Ansichten, materialisierte Ansichten, Sequenzen und fremde Tabellen".
Frank Heikens
42

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

Sie können die Sicherung einer einzelnen Tabelle durchführen, aber ich würde vorschlagen, die Sicherung der gesamten Datenbank durchzuführen und dann die gewünschte Tabelle wiederherzustellen. Es ist immer gut, eine Sicherung der gesamten Datenbank zu haben.

9 Möglichkeiten, pg_dump zu verwenden

Prashant Kumar
quelle
Ich bin mir nicht sicher, warum diese Antwort gewählt wurde. Die Leute klicken auf +1, ohne die Dinge selbst zu überprüfen oder zu versuchen. Das Problem bei dieser Antwort, das sie völlig unbrauchbar macht, besteht darin, dass die angegebenen Lösungen / Befehle keine in der Tabelle erstellten Sequenzen (Primärschlüssel) exportieren und der Import daher fehlschlägt. Mir ist nirgendwo eine einzige Produktions-PG-Datenbank bekannt, die keine Primärschlüssel mit Sequenzen verwendet. Es ist eine halbe Antwort, beantwortet die Frage nicht gründlich und erfordert zusätzliche Arbeit, um eine einzelne Tabelle zu exportieren / importieren.
user10664542
Wie oben erwähnt, habe ich einen starken Verdacht, dass user10664542, ohne SO postgres Antworten auf seinen Namen, hier überfordert ist. Während die Sequenz zusätzliche Komplikationen mit sich bringt, gibt es genug positive Stimmen für die ähnlichen Antworten, die die Leute wahrscheinlich zum Laufen gebracht haben, selbst wenn sie die Sequenz nachträglich anpassen mussten. Hätte ich meinen Speicherauszug wiederherstellen müssen, würde ich nach Möglichkeiten suchen, die letzte ID der Sequenz von a max(id)in meiner Tabelle zu aktualisieren . Dies ist die Antwort, die funktioniert hat, und ich bin zuversichtlich, dass ich sie beim Betrachten des generierten SQL wiederherstellen könnte.
JL Peyret
9

Wenn Sie eine grafische Benutzeroberfläche bevorzugen, können Sie pgAdmin III (Linux / Windows / OS X) verwenden. Klicken Sie einfach mit der rechten Maustaste auf die Tabelle Ihrer Wahl und dann auf "Backup". Es wird ein pg_dumpBefehl für Sie erstellt.

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Franck Dernoncourt
quelle
2

Als Ergänzung zu Frank Heikens Antwort sollten Sie das Flag angeben , wenn Sie INSERTstattdessen Anweisungen verwenden möchtencopy from stdin--inserts

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

Beachten Sie, dass ich die --ignore-versionFlagge weggelassen habe, weil sie veraltet ist.

user3207874
quelle
Ich bin mir nicht sicher, warum diese Antwort gewählt wurde. Die Leute klicken auf +1, ohne die Dinge selbst zu überprüfen oder zu versuchen. Das Problem bei dieser Antwort, das sie völlig unbrauchbar macht, besteht darin, dass die angegebenen Lösungen / Befehle keine in der Tabelle erstellten Sequenzen (Primärschlüssel) exportieren und der Import daher fehlschlägt. Mir ist nirgendwo eine einzige Produktions-PG-Datenbank bekannt, die keine Primärschlüssel mit Sequenzen verwendet. Es ist eine halbe Antwort, beantwortet die Frage nicht gründlich und erfordert zusätzliche Arbeit, um eine einzelne Tabelle zu exportieren / importieren.
user10664542