2010-03-16 7 views
0

Je suis sur Postgres, et j'ai deux bases de données sur la même machine, et je voudrais déplacer certaines données de la base de données Source vers la base de données Dest.Déplacement d'informations entre les bases de données

Database Source: 
Table User has a primary key 
Table Comments has a primary key 
Table UserComments is a join table with two foreign keys for User and Comments 

Dest ressemble comme source dans la structure, mais il a déjà des informations dans les tableaux de l'utilisateur et les commentaires qui doivent être conservés.

Je pense que je vais probablement devoir faire cela en quelques étapes.

Étape 1, je voudrais vider la source dans un fichier en utilisant la commande Postgres Copy.

Étape 2, Dans Dest Je voudrais ajouter une colonne second_key temporaire à la fois utilisateur et commentaires, et une nouvelle table de jointure SecondUserComments.

Étape 3, j'importerais le fichier sauvegardé dans Dest en utilisant à nouveau Copy, avec les clés entrées dans les colonnes second_key.

Étape 4, j'ajouterais des lignes à UserComments dans Dest en fonction du contenu de SecondUserComments, en utilisant uniquement les clés primaires réelles cette fois. Cela pourrait-il être fait avec une commande SQL ou aurais-je besoin d'un script?

Étape 5, supprimez la table SecondUserComments et supprimez les colonnes second_key.

Est-ce que cela semble être la meilleure façon de le faire, ou y a-t-il un meilleur moyen de le faire?

Répondre

1

Vous pouvez utiliser dblink pour vous connecter d'une base de données à l'autre et simplement insérer les enregistrements et les colonnes dont vous avez besoin. Ensuite, vous n'avez pas à changer le datamodel, vous n'avez pas à faire un pg_dump, juste du bon vieux SQL.

+0

Comment éviter de modifier le modèle de données étant donné que j'essaie également d'importer une table de jointure qui se joint aux clés primaires que je vais devoir modifier? –

Questions connexes