2016-09-14 1 views
3

j'ai besoin exemple simple comment copier les données de base de données DB1 tableau T1 à la base de données DB2 tableau T2.PostgreSQL: Comment copier des données d'une table de base de données à une autre base de données

T2 a une structure identique comme T1 (mêmes noms de colonnes, les propriétés. Les données différent seulement) DB2 en cours d'exécution sur le même serveur comme DB1, mais sur le port différent.

+1

Utilisez un wrapper de données étranger. –

Répondre

3

Dans le cas où les deux bases de données sont sur deux instances de serveur, vous pouvez exporter au format CSV à partir db1 puis importer les données dans db2:

COPY (SELECT * FROM t1) TO '/home/export.csv'; 

puis charger de nouveau dans db2:

COPY t2 FROM '/home/export.csv'; 

Encore une fois, les deux tables sur les deux instances de base de données différentes doivent avoir la même structure.

À l'aide des outils de ligne de commande: pg_dump et psql, vous pouvez même faire de cette façon:

pg_dump -U postgres -t t1 db1 | psql -U postgres -d db2 

Vous pouvez spécifier des arguments de ligne de commande à la fois pg_dump et psql pour spécifier l'adresse et/ou port de le serveur .

Une autre option serait d'utiliser un outil externe tel que: openDBcopy, pour effectuer la migration/copie de la table.

+0

La première instruction n'est pas supportée dans Postgres vous ne pouvez pas référencer des tables dans une base de données différente comme ça. (et en plus 'db2.t2' référence une table dans le _schema_' db2', pas la "base de données" db2) –

+0

Jetez un oeil à la réponse mise à jour, j'ai mal lu la question. – aleroot

+0

La première instruction ne fonctionnera pas ** sur les bases de données (uniquement sur _schema_, ce que fait votre instruction) –

0

Je suggère SQL Workbench/J. Il a une belle fonctionnalité qui est Data Pumper. Vous pouvez choisir de passer la colonne ID. Cette image (Data Pumper in action) est un exemple si j'utilise le mode GUI. Code ci-dessous, si j'utilise le mode console.

WbCopy -sourceProfile=source 
    -sourceGroup=DB1 
    -targetProfile=target 
    -targetGroup=DB2 
    -targetTable=table2 
    -sourceTable=table1 
    -columns='sales_code/sales_code, store_sid/store_sid, pos_id/pos_id' 
    -ignoreIdentityColumns=false 
    -deleteTarget=true 
    -continueOnError=true 
    -commitEvery=1000; 
+0

Cette réponse est très large et sent le SPAM. Veuillez modifier pour fournir une réponse plus spécifique à la question. Envisagez d'utiliser le code pour décrire le problème du questionneur. –

+0

J'utilise la fonctionnalité en mode GUI. C'est pourquoi j'ai posté la capture d'écran au lieu du code. Pourtant, j'ai ajouté l'exemple de code si j'utilise le mode console. –

+0

Votre réponse éditée a l'air bien. Votre avatar peut offenser les gens. –