432 Stimmen

Kopieren einer Tabelle von einer Datenbank in eine andere in Postgres

Ich versuche, eine ganze Tabelle von einer Datenbank in eine andere in Postgres zu kopieren. Irgendwelche Vorschläge?

7voto

Adobe Punkte 11816

Gleiche Antworten wie die von Benutzer5542464 y Piyush S. Wanare sondern in zwei Stufen aufgeteilt:

pg_dump -U Username -h DatabaseEndPoint -a -t TableToCopy SourceDatabase > dump
cat dump | psql -h DatabaseEndPoint -p portNumber -U Username -W TargetDatabase

sonst fragt die Pipe die beiden Passwörter gleichzeitig ab.

7voto

Developine Punkte 10317

Ich benutzte DataGrip (Von Intellij Idea). 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 die Quelltabelle aus und drücken Sie F5 oder (Rechtsklick -> Wählen Sie Tabelle kopieren nach.)

Daraufhin wird eine Liste aller Tabellen angezeigt (Sie können auch mit einem Tabellennamen im Popup-Fenster suchen). Wählen Sie einfach Ihr Ziel aus und drücken Sie OK.

Alles andere erledigt DataGrip für Sie.

5voto

Eloy A Punkte 51

Ich habe einige der hier vorgestellten Lösungen ausprobiert, und sie waren wirklich hilfreich. Nach meiner Erfahrung ist die beste Lösung die Verwendung von psql Kommandozeile, aber manchmal habe ich keine Lust, die psql-Kommandozeile zu benutzen. Hier ist also eine andere Lösung für pgAdminIII

create table table1 as(
 select t1.* 
 from dblink(
   'dbname=dbSource user=user1 password=passwordUser1',
   'select * from table1'  
  ) as t1(
    fieldName1 as bigserial,
    fieldName2 as text,
    fieldName3 as double precision 
  )
 )

Das Problem bei dieser Methode ist, dass die Namen der Felder und ihre Typen der Tabelle, die Sie kopieren wollen, geschrieben werden müssen.

5voto

Yordan Georgiev Punkte 4516

pg_dump funktioniert nicht immer.

Da Sie in beiden Datenbanken die gleiche Tabelle ddl haben haben, können Sie sie wie folgt aus stdout und stdin hacken:

 # grab the list of cols straight from bash

 psql -d "$src_db" -t -c \
 "SELECT column_name 
 FROM information_schema.columns 
 WHERE 1=1 
 AND table_name='"$table_to_copy"'"
 # ^^^ filter autogenerated cols if needed     

 psql -d "$src_db" -c  \
 "copy ( SELECT col_1 , col2 FROM table_to_copy) TO STDOUT" |\
 psql -d "$tgt_db" -c "\copy table_to_copy (col_1 , col2) FROM STDIN"

4voto

themadmax Punkte 2166

Prüfen Sie dies Python-Skript

python db_copy_table.py "host=192.168.1.1 port=5432 user=admin password=admin dbname=mydb" "host=localhost port=5432 user=admin password=admin dbname=mydb" alarmrules -w "WHERE id=19" -v
Source number of rows = 2
INSERT INTO alarmrules (id,login,notifybyemail,notifybysms) VALUES (19,'mister1',true,false);
INSERT INTO alarmrules (id,login,notifybyemail,notifybysms) VALUES (19,'mister2',true,false);

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