2016-04-07 11 views
4

Ich muss Daten von einer Tabelle in eine andere kopieren. Die beiden Tabellen haben fast die gleiche Struktur, befinden sich jedoch in verschiedenen Datenbanken.PostgreSQL kopiert/überträgt Daten von einer Datenbank in eine andere

ich versuchte

INSERT INTO db1.public.table2(
    id, 
    name, 
    adress, 
    lat, 
    lng 
) 
SELECT 
    id, 
    name, 
    adress, 
    lat 
    lng 
FROM db2.public.table2; 

WENN ich das versuchen, i Fehler Cross-Datenbank erhalten ... nicht implementiert

+0

Das Arbeiten mit Daten in mehreren Datenbanken ist eines der wenigen Dinge, die in Postgres schwieriger sind als in den meisten anderen Datenbanken. Ein Ort zum Starten ist das Verstehen von Fremddatenwrappern: http://www.postgresql.org/docs/current/static/postgres-fdw.html. –

Antwort

8

Dies ist eine wirklich einfache Aufgabe. verwenden dblink nur für diesen Zweck:

INSERT INTO t(a, b, c) 
SELECT a, b, c FROM dblink('host=xxx user=xxx password=xxx dbname=xxx', 'SELECT a, b, c FROM t') AS x(a integer, b integer, c integer) 

Wenn Sie Daten aus externen Datenbank in regelmäßigen Abständen holen müssen, wäre es klug, einen Server und Benutzerzuordnung zu definieren. Dann könnten Sie kürzere Anweisung verwenden:

dblink('yourdbname', 'your query') 
+0

danke für die Antwort. Es klappt. Das zweite t in der Abfrage ist die Tabelle in der entfernten Datenbank, von der die Daten abgerufen werden. – fabvys

1

Es gibt auch einen anderen Weg, es zu tun. Wenn dblink Erweiterung nicht verfügbar ist, ist es möglich, Daten direkt in der Befehlszeile zu kopieren, mit Rohrverbindungsstandardeingabe und ouput:

psql source_database -c 'COPY table TO stdout' | psql target_database -c 'COPY table FROM stdin' 

Aber das wird Arbeit nur in Postgres 9.4 oder höher

2

Wenn Sie auf postgresql 9.0 oder höher (und wahrscheinlich 8,0 oder höher) in einer psql-Sitzung können Sie auch:

CREATE DATABASE new_database TEMPLATE original_database; 

der new_database wird ein Klon von original_database einschließlich Tabellen, Tabellenschema, Codierungen und Daten sein.

From the docs:

Die prinzipielle Einschränkung ist, dass keine andere Sitzungen mit der Source-Datenbank verbunden werden können, während es kopiert wird.

Ich würde empfehlen, dass Sie sicherstellen, dass der Klon in der Tat richtig mit vernünftigen wählt aus den neuen und alten db Tabellen ist. Die Dokumentation sagt auch:

Es ist wichtig zu verstehen, dass dies jedoch (noch) nicht als allgemeine "COPY DATABASE" -Funktion gedacht ist.

+0

guten job danke –