419 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?

466voto

thomax Punkte 8385

Extrahieren Sie die Tabelle und leiten Sie sie direkt an die Zieldatenbank weiter:

pg_dump -t table_to_copy source_db | psql target_db

注意してください。 Wenn in der anderen Datenbank die Tabelle bereits eingerichtet ist, sollten Sie die -a um nur Daten zu importieren, da sonst seltsame Fehlermeldungen wie "Kein Speicherplatz vorhanden" auftreten können:

pg_dump -a -t table_to_copy source_db | psql target_db

158voto

a2ron44 Punkte 1613

Sie können auch die Backup-Funktion in pgAdmin II verwenden. Folgen Sie einfach diesen Schritten:

  • Klicken Sie in pgAdmin mit der rechten Maustaste auf die Tabelle, die Sie verschieben möchten, und wählen Sie "Backup".
  • Wählen Sie das Verzeichnis für die Ausgabedatei und setzen Sie Format auf "plain".
  • Klicken Sie auf die Registerkarte "Dump Options #1", markieren Sie "Only data" oder "only Schema" (je nachdem, was Sie tun)
  • Klicken Sie im Abschnitt "Abfragen" auf "Spalteneinfügungen verwenden" und "Benutzereinfügungsbefehle".
  • Klicken Sie auf die Schaltfläche "Backup". Die Ausgabe erfolgt in einer .backup-Datei
  • Öffnen Sie diese neue Datei mit Notepad. Dort sehen Sie die Einfügeskripte, die für die Tabelle/Daten benötigt werden. Kopieren Sie diese und fügen Sie sie in die neue Datenbank-SQL-Seite in pgAdmin ein. Als pgScript ausführen - Abfrage->Ausführen als pgScript F6

Funktioniert gut und kann mehrere Tabellen auf einmal bearbeiten.

119voto

tinychen Punkte 1809

Verwendung von dblink wäre bequemer!

truncate table tableA;

insert into tableA
select *
from dblink('hostaddr=xxx.xxx.xxx.xxx dbname=mydb user=postgres',
            'select a,b from tableA')
       as t1(a text,b text);

45voto

Alexey Sviridov Punkte 3109

Mit psql, auf einem Linux-Host, der mit beiden Servern verbunden ist

( export PGPASSWORD=password1 
  psql -U user1 -h host1 database1 \
  -c "copy (select field1,field2 from table1) to stdout with csv" ) \
| 
( export PGPASSWORD=password2 
  psql -U user2 -h host2 database2 \ 
   -c "copy table2 (field1, field2) from stdin csv" )

26voto

Erste dblink installieren

Dann würden Sie etwa so vorgehen:

INSERT INTO t2 select * from 
dblink('host=1.2.3.4
 user=*****
 password=******
 dbname=D1', 'select * t1') tt(
       id int,
  col_1 character varying,
  col_2 character varying,
  col_3 int,
  col_4 varchar 
);

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