659 Stimmen

Kopieren der PostgreSQL-Datenbank auf einen anderen Server

Ich möchte eine produktive PostgreSQL-Datenbank auf einen Entwicklungsserver kopieren. Was ist der schnellste und einfachste Weg, dies zu tun?

885voto

Ferran Punkte 13653

Sie brauchen keine Zwischendatei zu erstellen. Sie können

pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname

ou

pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname

mit psql o pg_dump um eine Verbindung zu einem entfernten Host herzustellen.

Bei einer großen Datenbank oder einer langsamen Verbindung kann es schneller sein, eine Datei zu dumpen und die Datei komprimiert zu übertragen.

Wie Kornel schon sagte, ist es nicht nötig, in eine Zwischendatei zu dumpen. Wenn Sie komprimiert arbeiten wollen, können Sie einen komprimierten Tunnel verwenden.

pg_dump -C dbname | bzip2 | ssh  remoteuser@remotehost "bunzip2 | psql dbname"

ou

pg_dump -C dbname | ssh -C remoteuser@remotehost "psql dbname"

aber auch bei dieser Lösung muss an beiden Enden eine Sitzung eingerichtet werden.

Anmerkung: pg_dump dient zum Sichern und psql ist für die Wiederherstellung. Also, die Der erste Befehl in dieser Antwort kopiert von lokal nach fern und der zweite von fern nach lokal . Mehr -> https://www.postgresql.org/docs/9.6/app-pgdump.html

41 Stimmen

Es besteht keine Notwendigkeit für Zwischendateien - Sie können einen komprimierten SSH-Tunnel verwenden oder einfach eine Pipe senden: pg_dump | bzip2 | ssh "bunzip2 | pg_restore"

5 Stimmen

Wenn Sie bzip2 verwenden, schalten Sie die ssh-Kompression aus, um die Übertragung zu beschleunigen!

1 Stimmen

Beim Befehl ssh ist die Komprimierung bereits standardmäßig deaktiviert. Im Beispiel verwende ich bei der Verwendung der ssh-Komprimierung nicht bzip2 und bei der Verwendung von bzip2 verwende ich keine ssh-Komprimierung.

181voto

unmounted Punkte 31968
pg_dump the_db_name > the_backup.sql

Kopieren Sie dann die Sicherung auf Ihren Entwicklungsserver und stellen Sie sie mit wieder her:

psql the_new_dev_db < the_backup.sql

5 Stimmen

Jemand hat mir gesagt, dass dies problematisch sein kann - Probleme mit den Zugriffsrechten, die dazu führen, dass entweder der Dump oder die Wiederherstellung abbricht, wenn er auf einen Trigger trifft?

28 Stimmen

@rmbarnes: Wenn es Probleme gibt - müssen sie behoben werden. Ohne detaillierte Kenntnisse darüber, was dieser "Jemand" getan hat, kann niemand diese Behauptung bestätigen oder zurückweisen.

7 Stimmen

Verwenden Sie das --no-owner Flag mit pg_dump. Das überspringt das Problem und die erste Bearbeitung dieses Beitrags verwendete es - aber dann dachte ich, Sie bräuchten vielleicht eine genauere Übereinstimmung mit der ursprünglichen Datenbank.

47voto

Verwenden Sie pg_dump und später psql o pg_restore - abhängig davon, ob Sie die Optionen -Fp oder -Fc für pg_dump wählen.

Beispiel für die Verwendung:

ssh production
pg_dump -C -Fp -f dump.sql -U postgres some_database_name
scp dump.sql development:
rm dump.sql
ssh development
psql -U postgres -f dump.sql

0 Stimmen

Was ist der Unterschied zwischen -Fp y -Fc

0 Stimmen

-F, --format=c|d|t|p Ausgabedateiformat (benutzerdefiniert, Verzeichnis, tar, einfacher Text (Standard))

34voto

zoran Punkte 783

Die akzeptierte Antwort ist richtig, aber wenn Sie die interaktive Eingabe des Kennworts vermeiden wollen, können Sie dies verwenden:

PGPASSWORD={{export_db_password}} pg_dump --create -h {{export_db_host}} -U {{export_db_user}} {{export_db_name}} | PGPASSWORD={{import_db_password}} psql -h {{import_db_host}} -U {{import_db_user}} {{import_db_name}}

2 Stimmen

Dies ist der einzige Ort, an dem ich diese Informationen gefunden habe, ein guter Tipp

0 Stimmen

Gibt es eine Möglichkeit, diesen Befehl mit mehreren Threads zu versehen?

0 Stimmen

Wenn Sie eine öffentliche IP von Postgres zum Verbinden verwenden, müssen Sie die Optionen -p hinzufügen, um den Port des Hosts anzugeben, z.B.: -h {{export_db_host}} -p {{export_db_port}}

31voto

Eric H. Punkte 6606

Wenn Sie zwischen verschiedenen Versionen migrieren möchten (z.B. wenn Sie Postgres aktualisiert haben und 9.1 auf localhost:5432 und 9.3 auf localhost:5434 laufen lassen), können Sie dies tun:

pg_dumpall -p 5432 -U myuser91 | psql -U myuser94 -d postgres -p 5434

Überprüfen Sie die Migrationsdokumente .

0 Stimmen

Ich werde mehrfach nach dem (myuser91/postgres)-Passwort gefragt, gibt es eine Möglichkeit, dass ich das Passwort nur einmal eingeben muss?

0 Stimmen

@MartinWeber Erstellen Sie eine ,pgpass-Datei wie in diesem Dokument beschrieben postgresql.org/docs/9.4/static/libpq-pgpass.html

0 Stimmen

Was ist, wenn beide dieselben Anschlüsse haben?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X