Ich versuche, eine ganze Tabelle von einer Datenbank in eine andere in Postgres zu kopieren. Irgendwelche Vorschläge?
Antworten
Zu viele Anzeigen?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.
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.
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.
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"
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);