Daten aus einer Tabelle in eine andere kopieren

Hallo Zusammen,

ich bin in der PostgreSQL-Welt ganz neu.

ich habe folgende Frage: wie ich eine Tabelle aus der DB1 in die DB2 kopieren kann?

so habe ich versucht zu machen:

  1. sql-code der Tabelle1 aus der DB1 kopiert und in der DB2 im sql-Editor eingefügt -> identische Tabelle angelegt, die allerdingst ganz leer ist.

  2. mein Versuch die Daten zu kopieren:

  • Rechtsklick auf der Tabelle1 (DB1) -> Backup -> PLAIN (Nur Daten) -> tb1.sql (gespeichert)
  • DB2 -> sql-Editor -> Datei öffnen -> tb1.sql


COPY tabelle1 (attr1, attr2) FROM stdin;
DE111 245 407

-> ausführen
und da tritt ein Fehler auf und zeigt auf die erste Zeile mit Daten:
“syntax error”

und da ich micht mit der syntax nicht auskenne kann ich auch nicht verstehen woran der Fehler liegt.

:confused:

Eine genauere Wiedergabe des Fehler wäre hilfreich gewesen.

Was Du in der GUI wie getippt hast, kann ich mangels GUI und Erfahrung damit nicht nachvollziehen, aber wenn es nur darum geht, eine Tabelle aus DB1 nach DB2 zu tragen geht das auf der Kommandozeile sehr simpel:

kretschmer@pegasus:~$ createdb foo1
CREATE DATABASE
kretschmer@pegasus:~$ createdb foo2
CREATE DATABASE
kretschmer@pegasus:~$ echo "create table bla(id int); insert into bla values (1);" | psql foo1;
CREATE TABLE
INSERT 0 1
kretschmer@pegasus:~$ pg_dump -t bla foo1 | psql foo2

Die ersten 3 Befehle sind dabei nur der Kram, zwei DBs zu erzeugen und in die erste der beiden eine Tabelle mit Daten reinzuwerfen. Das eigentlich kopieren ist im letzten Befehl. Es dump einfach nur die Tabelle aus der einen DB und pipt das in ein psql rein, welches mit der 2. DB verbunden ist. Das unktioniert so auch z.B. über Rechnergrenzen hinweg.


Btw.: hat es einen tieferen Sinn, daß Du 2 DBs hast? Nicht, daß ich Dir das ausreden will, aber oft kommt man mit Schemas besser. Unterschiedliche DBs sind eine recht massive Trennung der Daten, oft will man das nicht so hart, oft hätten Schemas gereicht.


Andreas

Hallo,

danke!
ich hab anscheinend nicht genug Rechte, um diese Operation ausführen zu können. “Permission de nied”.

soweit ich das verstehe, löscht dieser Befehl die Tabelle aus der DB1 nicht, die Tabelle wird nur kopiert? Muss schon eine Tabelle in der DB2 mit dem gleichen Schema angelegt werden? (Aus Deinem Beispiel habe ich so verstanden, dass nicht oder?)

Die Sache mit zwei Db hab nicht ich ausgedacht, die zweite Db ist die Testdatenbank, um die Funktionen zunächst dort testen zu können.
Also jetzt muss ich eine plpgsql-Funktion testen, dafür brauche ich ein Paar Tabellen aus der eigentlichen Datenbank, wo die zu kopierende Tabelle unberührt bleiben müssen.

Ja, nein. Nein.

Die Sache mit zwei Db hab nicht ich ausgedacht, die zweite Db ist die Testdatenbank, um die Funktionen zunächst dort testen zu können.
Also jetzt muss ich eine plpgsql-Funktion testen, dafür brauche ich ein Paar Tabellen aus der eigentlichen Datenbank, wo die zu kopierende Tabelle unberührt bleiben müssen.

Da würde ich einfach mit Schemas arbeiten. Deutlich schmerzfreier.

Andreas