Daten zwischen Tabellen / Umgebungen kopieren
Oracle
-- Into an existing table
INSERT INTO target_tbl (id, name) SELECT id, name FROM source_tbl WHERE status = 'ACTIVE';
-- By creating a new table (CTAS)
CREATE TABLE target_tbl AS SELECT * FROM source_tbl;
-- From a remote database via a database link
INSERT INTO target_tbl SELECT * FROM source_tbl@remote_db;Innerhalb derselben Datenbank INSERT ... SELECT oder CREATE TABLE AS SELECT (CTAS) verwenden. Für Kopien zwischen Umgebungen sind ein Database Link (@remote_db) oder Data Pump vorzuziehen. Der Hint APPEND beschleunigt per Direct Path.
PostgreSQL
-- Same database
INSERT INTO target_tbl (id, name) SELECT id, name FROM source_tbl;
CREATE TABLE target_tbl AS SELECT * FROM source_tbl;
-- Between environments (psql pipe)
-- pg_dump -t source_tbl sourcedb | psql targetdb
-- or read the remote table with postgres_fdw and INSERTInnerhalb derselben DB INSERT ... SELECT / CTAS verwenden. Zwischen Servern eine Pipeline pg_dump | psql verwenden oder über eine Foreign Table mit postgres_fdw kopieren.
MySQL
-- Same database
INSERT INTO target_tbl (id, name) SELECT id, name FROM source_tbl;
CREATE TABLE target_tbl AS SELECT * FROM source_tbl;
-- Between servers (mysqldump pipe)
-- mysqldump sourcedb source_tbl | mysql -h targethost targetdbInnerhalb derselben DB INSERT ... SELECT oder CREATE TABLE ... AS SELECT. Zwischen verschiedenen Servern ist es üblich, die Ausgabe von mysqldump in den mysql-Client zu pipen. CTAS kopiert keine Indizes und Constraints.
SQL Server
-- Into an existing table
INSERT INTO target_tbl (id, name) SELECT id, name FROM source_tbl;
-- By creating a new table
SELECT * INTO target_tbl FROM source_tbl;
-- Between servers: linked server
INSERT INTO target_tbl SELECT * FROM [REMOTE_SRV].shop.dbo.source_tbl;In SQL Server erfolgt das Kopieren in eine neue Tabelle mit SELECT ... INTO (das CTAS-Äquivalent). Zwischen Servern einen Linked Server (vierteiliger Name), bcp out/in oder SSIS verwenden.
MongoDB
// Write an aggregation result to another collection
db.source_tbl.aggregate([
{ $match: { status: "ACTIVE" } },
{ $out: "target_tbl" }
]);
// Merge into an existing collection (upsert)
db.source_tbl.aggregate([ { $merge: { into: "target_tbl", whenMatched: "merge", whenNotMatched: "insert" } } ]);$out ersetzt die Ziel-Collection vollständig; $merge führt mit vorhandenen Dokumenten zusammen bzw. fügt ein (gleiche oder andere DB). Für Verschiebungen zwischen Servern mongodump | mongorestore oder mongoexport/mongoimport verwenden.
Redis
# Move a single key to another server (deleted from the source)
MIGRATE target_host 6379 customer:1 0 5000
# To copy (without deleting): DUMP + RESTORE
DUMP customer:1 # returns the serialized value
RESTORE customer:1new 0 "<dump-data>"MIGRATE verschiebt den Key atomar in die Zielinstanz und löscht ihn in der Quelle (mit der Option COPY wird nicht gelöscht). Zum Kopieren innerhalb derselben Instanz den Befehl COPY (6.0+) oder DUMP+RESTORE verwenden.
Elasticsearch
# Within the same cluster
POST _reindex
{ "source": { "index": "source_tbl" }, "dest": { "index": "target_tbl" } }
# From a remote cluster (remote reindex; requires the whitelist setting)
POST _reindex
{ "source": { "remote": { "host": "http://remote:9200" }, "index": "source_tbl" },
"dest": { "index": "target_tbl" } }_reindex kopiert zwischen Indizes; mit einer Query lässt sich filtern und mit einem Script transformieren. Zwischen Clustern Remote Reindex verwenden (reindex.remote.whitelist muss auf dem Ziel definiert sein). Große Jobs werden mit slices parallelisiert.