Ich versuche, eine ganze Tabelle in Postgres von einer Datenbank in eine andere zu kopieren. Irgendwelche Vorschläge?
273
Ich versuche, eine ganze Tabelle in Postgres von einer Datenbank in eine andere zu kopieren. Irgendwelche Vorschläge?
Antworten:
Extrahieren Sie die Tabelle und leiten Sie sie direkt an die Zieldatenbank weiter:
Hinweis: Wenn in der anderen Datenbank die Tabelle bereits eingerichtet ist, sollten Sie das
-a
Flag nur zum Importieren von Daten verwenden. Andernfalls werden möglicherweise seltsame Fehler wie "Nicht genügend Speicher" angezeigt:quelle
pg_dump -U remote_user -h remote_server -t table_to_copy source_db | psql target_db
-a
Flag nur für Daten verwenden sollten, wenn in der anderen Datenbank die Tabelle bereits eingerichtet ist . dhpg_dump -a -t my_table my_db | psql target_db
. Während ich hier bin: Wenn sich Ihre Datenbank auf einem Server befindet, fällt es mir leichter, die Datenbank einfach in eine Datei zu kopieren und diese Datei dann in die Datenbank zu scp und dann den Inhalt der Datei an psql zu senden. zBpg_dump -a -t my_table my_db > my_file.sql
und nachdem Sie das auf Ihren Server gestellt haben ->psql my_other_db < my_file.sql
pg_dump -t '"tableToCopy"' source_db | psql target_db
. Beachten Sie, dass einfache und doppelte Anführungszeichen den Tabellennamen umgebenSie können die Sicherungsfunktion auch in pgAdmin II verwenden. Befolgen Sie einfach diese Schritte:
Funktioniert gut und kann mehrere Tabellen gleichzeitig erstellen.
quelle
Objects
Abschnitt auswählen . Klicken Sie unter OSX auf die Schaltfläche SQL oder rufen SieSQL Editor
über dasTools
Menü das aus der Sicherungsdatei kopierte SQL ein.Die Verwendung von dblink wäre bequemer!
quelle
Verwenden von psql auf einem Linux-Host, der mit beiden Servern verbunden ist
quelle
PGPASSWORD=password1 psql -U ...
dann brauchen Sie nicht einmal explizite Subshells! Normalerweise sollten Sie zuerst ein paar Dinge tun, um sie einzurichten, sodass möglicherweise ohnehin Unterschalen erforderlich sind. Außerdem werden die Passwörter nicht in nachfolgende Prozesse exportiert. Vielen Dank!pg_dump -t '<table_name>' --schema-only
Zuerst installieren dblink
Dann würden Sie so etwas tun wie:
quelle
INSERT INTO l_tbl (l_col1, l_col2, l_col3) SELECT * FROM dblink('dbname=r_db hostaddr=r_ip password=r_pass user=r_usr', 'select r_col1, r_col2, r_col3 from r_tbl where r_col1 between ''2015-10-29'' AND ''2015-10-30'' ') AS t1(col1 MACADDR, col2 TIMESTAMP, col3 NUMERIC(7,1));
(l bedeutet lokal, r ist remote. Escape einfache Anführungszeichen. Geben Sie Col-Typen an.)Verwenden Sie pg_dump, um Tabellendaten zu sichern und sie dann mit psql wiederherzustellen.
quelle
Wenn Sie beide Remote-Server haben, können Sie folgende Schritte ausführen:
Die erwähnte Tabelle der Quelldatenbank wird in die gleichnamige Tabelle der Zieldatenbank kopiert, sofern bereits ein Schema vorhanden ist.
quelle
Sie können Folgendes tun:
quelle
Hier ist, was für mich funktioniert hat. Erster Speicherauszug in eine Datei:
Laden Sie dann die abgelegte Datei:
quelle
Verwenden Sie den folgenden Befehl, um eine Tabelle in Ihrem lokalen Setup von Datenbank A in Datenbank B zu verschieben:
quelle
export PGPASSWORD=<passw>
bevor Sie den BefehlIch habe einige der Lösungen hier ausprobiert und sie waren wirklich hilfreich. Nach meiner Erfahrung ist die beste Lösung die Verwendung der psql- Befehlszeile, aber manchmal habe ich keine Lust, die psql-Befehlszeile zu verwenden. Hier ist eine andere Lösung für pgAdminIII
Das Problem bei dieser Methode ist, dass der Name der Felder und ihre Typen der Tabelle, die Sie kopieren möchten, geschrieben werden müssen.
quelle
pg_dump
funktioniert nicht immer.Vorausgesetzt, Sie haben dieselbe Tabelle ddl in beiden dbs, können Sie sie wie folgt von stdout und stdin hacken:
quelle
Entspricht den Antworten von user5542464 und Piyush S. Wanare, ist jedoch in zwei Schritte unterteilt:
Andernfalls werden die beiden Passwörter gleichzeitig von der Pipe abgefragt.
quelle
Sie müssen DbLink verwenden, um Tabellendaten in eine andere Tabelle in einer anderen Datenbank zu kopieren. Sie müssen die DbLink-Erweiterung installieren und konfigurieren, um eine datenbankübergreifende Abfrage auszuführen.
Ich habe bereits einen ausführlichen Beitrag zu diesem Thema erstellt. Bitte besuchen Sie diesen Link
quelle
Überprüfen Sie dieses Python-Skript
quelle
Wenn beide DBs (von & bis) kennwortgeschützt sind, fragt das Terminal in diesem Szenario nicht nach dem Kennwort für beide DBs. Die Kennwortabfrage wird nur einmal angezeigt. Um dies zu beheben, übergeben Sie das Kennwort zusammen mit den Befehlen.
quelle
Ich habe DataGrip (von Intellij Idea) verwendet. und es war sehr einfach, Daten von einer Tabelle (in einer anderen Datenbank in eine andere) zu kopieren.
Stellen Sie zunächst sicher, dass Sie mit beiden DataSources in Data Grip verbunden sind.
Wählen Sie Quelltabelle und drücken Sie F5 oder (Klicken Sie mit der rechten Maustaste -> Wählen Sie Tabelle kopieren nach.)
Dies zeigt Ihnen eine Liste aller Tabellen (Sie können auch mit einem Tabellennamen im Popup-Fenster suchen). Wählen Sie einfach Ihr Ziel aus und drücken Sie OK.
DataGrip erledigt alles andere für Sie.
quelle
Wenn Sie pgAdmin (Backup :
pg_dump
, Restore :)pg_restore
unter Windows ausführen , wird versucht, die Datei standardmäßig an auszugeben. Ausc:\Windows\System32
diesem Grund wird der Fehler "Berechtigung / Zugriff verweigert" angezeigt, und nicht, weil der Benutzer postgres nicht ausreichend erhöht ist. Führen Sie pgAdmin als Administrator aus oder wählen Sie einen anderen Speicherort für die Ausgabe als die Systemordner von Windows.quelle
Alternativ können Sie Ihre Remote-Tabellen auch als lokale Tabellen mit der Erweiterung für fremde Daten-Wrapper verfügbar machen. Sie können dann in Ihre Tabellen einfügen, indem Sie aus den Tabellen in der entfernten Datenbank auswählen. Der einzige Nachteil ist, dass es nicht sehr schnell ist.
quelle