Des öfteren kommt man in die Situation, dass man gerne einen 1:1 Kopie einer Datenbanktabelle haben möchte. Sei es um diverse Abfragen und Berechnungen an quasi Echtdaten zu testen, oder man will einfach nur die Tabellenstruktur klonen, usw. Das klonen einer Datenbanktabelle ist mit Hilfe von SQL – Befehlen in fast allen Datenbankmanagementsystemen ein Kinderspiel.
Das einzige was beim Klonen natürlich nicht möglich ist, ist dass die geklonte Tabelle eins zu eins den gleichen Namen bekommt wie die original Tabelle.
Kommen wir nun gleich zu den wichtigsten Befehlen für das Klonen. Ich zeige euch zuerst ein Beispiel in MySQL, bzw. MariaDB und danach in PostgreSQL.
MySQL, bzw. MariaDB
In MySQL reichen 2 Befehlszeilen für das Klonen.
Als erstes erstellen wir eine Kopie der Tabellenstruktur:
CREATE TABLE klon LIKE original;
So einfach bekommen wir eine Tabelle klon, die die selbe Struktur aufweist, wie die Tabelle original.
Jetzt geht es nur noch darum auch die Daten vom Original in den Klon zu kopieren und das erreichen wir mit:
INSERT INTO klon SELECT * FROM original;
Das Kopieren der Daten kann natürlich einiges an Zeit in Anspruch nehmen. Natürlich ist es auch empfehlenswert nach dem Kopieren zu prüfen, ob wohl wirklich alle Daten richtig kopiert wurden.
PostgreSQL
Auch in PostgreSQL ist das Klonen ein Kinderspiel. Wie in MySQL kommt man auch in PostgreSQL mit zwei Zeilen aus, der Befehl zum Kopieren der Daten ist sogar derselbe.
Also das Kopieren der Struktur geht mit:
CREATE TABLE klon (LIKE original INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING INDEXES );
Wie man hier schön erkennen kann, ist es notwendig etwas genauer anzugeben, was alles in die Struktur der neuen Tabelle mit übernommen werden soll.
Und wie bereits erwähnt geht das Kopieren der Daten analog zu MySQL:
INSERT INTO klon SELECT * FROM original;
Fazit
Es ist ganz einfach ganze Tabellen zu duplizieren, einzig bei großen Datenmengen kann es schon eine Weile dauern, bis die Daten vollständig kopiert sind.
Als Tipp kann ich noch mitgeben, dass es je nach Datenbank sinnvoll sein kann, den Kopiervorgang innerhalb einer Transaktion auszuführen.
Schreibe einen Kommentar