Ich möchte eine PostgreSQL-Produktionsdatenbank auf einen Entwicklungsserver kopieren. Was ist der schnellste und einfachste Weg, dies zu tun?
quelle
Ich möchte eine PostgreSQL-Produktionsdatenbank auf einen Entwicklungsserver kopieren. Was ist der schnellste und einfachste Weg, dies zu tun?
Sie müssen keine Zwischendatei erstellen. Du kannst tun
pg_dump -C -h localhost -U localuser dbname | psql -h remotehost -U remoteuser dbname
oder
pg_dump -C -h remotehost -U remoteuser dbname | psql -h localhost -U localuser dbname
Verwenden von psql
oder pg_dump
zum Herstellen einer Verbindung zu einem Remote-Host.
Bei einer großen Datenbank oder einer langsamen Verbindung kann das Ablegen einer Datei und das Übertragen der komprimierten Datei schneller sein.
Wie Kornel sagte, müssen Sie nicht in eine Zwischendatei sichern. Wenn Sie komprimiert arbeiten möchten, können Sie einen komprimierten Tunnel verwenden
pg_dump -C dbname | bzip2 | ssh remoteuser@remotehost "bunzip2 | psql dbname"
oder
pg_dump -C dbname | ssh -C remoteuser@remotehost "psql dbname"
Diese Lösung erfordert jedoch auch eine Sitzung an beiden Enden.
Hinweis: pg_dump
dient zum Sichern und psql
Wiederherstellen. Der erste Befehl in dieser Antwort ist das Kopieren von lokal nach remote und der zweite von remote nach lokal . Mehr -> https://www.postgresql.org/docs/9.6/app-pgdump.html
ssh remoteuser@remotehost "pg_dump -C dbname | bzip2" | bunzip2 | psql dbname
?Kopieren Sie dann das Backup auf Ihren Entwicklungsserver und stellen Sie es wieder her mit:
quelle
Verwenden Sie pg_dump und später psql oder pg_restore - je nachdem, ob Sie für pg_dump die Optionen -Fp oder -Fc auswählen.
Anwendungsbeispiel:
quelle
Wenn Sie zwischen Versionen migrieren möchten (z. B. haben Sie postgres aktualisiert und 9.1 auf localhost: 5432 und 9.3 auf localhost: 5434 ausgeführt), können Sie Folgendes ausführen:
Überprüfen Sie die Migrationsdokumente .
quelle
pg_basebackup
Dies scheint jetzt der bessere Weg zu sein, insbesondere für große Datenbanken.Sie können eine Datenbank von einem Server mit derselben oder einer älteren Hauptversion kopieren. Oder genauer :
Dafür benötigen Sie auf dem Quellserver:
listen_addresses = '*'
um eine Verbindung vom Zielserver herstellen zu können. Stellen Sie sicher, dass Port 5432 offen ist.max_wal_senders = 1
(-X fetch
),2
für-X stream
(Standardeinstellung bei PostgreSQL 12) oder mehr.wal_level = replica
oder höher, um einstellen zu könnenmax_wal_senders > 0
.host replication postgres DST_IP/32 trust
inpg_hba.conf
. Dadurch wirdpg
jedem vomDST_IP
Computer aus Zugriff auf den Cluster gewährt . Möglicherweise möchten Sie auf eine sicherere Option zurückgreifen.Änderungen 1, 2, 3 erfordern einen Neustart des Servers, Änderung 4 erfordert ein erneutes Laden.
Auf dem Zielserver:
quelle
Führen Sie diesen Befehl mit dem Datenbanknamen aus, den Sie sichern möchten, um den DB-Speicherauszug zu erstellen.
Scannen Sie nun diese Dump-Datei auf den Remote-Computer, auf den Sie die Datenbank kopieren möchten.
Führen Sie auf dem Remotecomputer den folgenden Befehl in ~ / some / folder aus, um die Datenbank wiederherzustellen.
quelle
Ich hatte ziemlich viel zu kämpfen und schließlich war die Methode, die es mir ermöglichte, es mit Rails 4 zum Laufen zu bringen, folgende:
auf Ihrem alten Server
Ich musste den Postgres-Linux-Benutzer verwenden, um den Dump zu erstellen. Außerdem musste ich -c verwenden, um die Erstellung der Datenbank auf dem neuen Server zu erzwingen. --inserts weist es an, die INSERT () -Syntax zu verwenden, die sonst für mich nicht funktionieren würde :(
dann auf dem neuen Server einfach:
Um die dump.sql-Datei zwischen dem Server zu übertragen, habe ich einfach die "cat" verwendet, um den Inhalt zu drucken, und dann "nano", um ihn neu zu erstellen und den Inhalt zu kopieren.
Außerdem war die ROLLE, die ich für die beiden Datenbanken verwendete, unterschiedlich, sodass ich den gesamten Eigentümernamen im Dump finden und ersetzen musste.
quelle
Dump Ihre Datenbank:
pg_dump database_name_name > backup.sql
Importieren Sie Ihre Datenbank zurück:
psql db_name < backup.sql
quelle
Lassen Sie mich ein Linux-Shell-Skript freigeben, um Ihre Tabellendaten von einem Server auf einen anderen PostgreSQL-Server zu kopieren.
Referenz aus diesem Blog:
Linux Bash Shell Script für die Datenmigration zwischen PostgreSQL-Servern:
Ich migriere nur die Daten; Bitte erstellen Sie eine leere Tabelle auf Ihrem Ziel- / zweiten Datenbankserver.
Dies ist ein Dienstprogramm-Skript. Darüber hinaus können Sie das Skript für die allgemeine Verwendung ändern, indem Sie Parameter für Hostname, Datenbankname, Tabellenname und andere hinzufügen
quelle
Die akzeptierte Antwort ist korrekt. Wenn Sie jedoch vermeiden möchten, das Kennwort interaktiv einzugeben, können Sie Folgendes verwenden:
quelle