[BDD] Migration

Bonjour,

Ce n’est pas vraiment une question à propos de rails mais cela a à
voir avec l’application rails que je suis en train de développer.

J’arrive à la fin de la phase de développement de mon application et
je dois maintenant migrer les donnés de l’ancien logiciel (programmé
‘salement’ en php/mysql) vers ma bdd.

Mon problème est que la bdd existante est vraiment mal organisée, j’ai
donc développé la nouvelle version du logiciel sans prendre en compte
l’organisation de la base actuelle.
Je vais devoir exécuter des requêtes sur la base existante, traiter
les résultats puis les insérer dans la bdd de mon application en
rails. Je pense pour l’instant faire ca avec des scripts ruby en
utilisant la librairie mysql, avez-vous une meilleure suggestion ?
Je n’ai jamais fait une telle opération et ca s’annonce compliqué est
long, si il y a un moyen reconnu comme étant le meilleur pour faire
ca, je suis preneur !

Merci

adrien

Salut,

je suis en train de faire la même chose pour migrer les données de
LinuxFr.org de la version templeet vers la future version Rails. Je n’ai
pas trouvé de solution miracle, mais je m’en suis pas trop mal sorti
avec sequel[1]. Les scripts sont sur github[2], donc tu peux jeter un
coup d’œil pour voir si ça te convient.

[1] http://sequel.rubyforge.org/documentation.html
[2] GitHub - linuxfrorg/migration-linuxfr.org: Migration des données du site LinuxFr.org de la version templeet vers la version RoR

++
Bruno

Génial !!
C’est exactement ce qu’il me fallait, pas une solution miracle, je me
doutais qu’il n’y en avait pas mais une méthode pour faire ca
efficacement.
Merci beaucoup :slight_smile:

adrien

Le 20 décembre 2009 08:38, Bruno M. [email protected] a écrit :

++
Bruno


Vous avez reçu ce message, car vous êtes abonné au groupe “Railsfrance” de
Google G…
Pour transmettre des messages à ce groupe, envoyez un e-mail à l’adresse
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l’adresse
[email protected]


COQUIO Adrien
[email protected]

Je me retrouve devant un problème incompréhensible (jusqu’à ce que je
trouve/on me donne la solution :wink: )
J’utilise, comme précisé avant la librairie sequel.
DEPA est une bdd contenant une colonne COMMUNES ayant une clé primaire
sur le champ cle SMALLINT(5)
CB est une bdd contenant une colonne communes ayant une clé primaire
sur le champ id INT(11)

J’ai le code suivant :

DEPA.transaction do
communes = CB[:COMMUNES]
communes.each do |commune|
DEPA[:communes].insert(:id => commune[:cle])
end
end

Lorsque je l’execute j’obtient l’erreur suivante :
Mysql::Error: Duplicate entry ‘246’ for key 1 (Sequel::DatabaseError)

Incompréhensible car cle étant une cle primaire, elle ne peut pas être
dupliqué…

Lorsque je relance le meme script j’obitent l’erreur suivante :
Mysql::Error: Duplicate entry ‘247’ for key 1 (Sequel::DatabaseError)

Et finalement si j’execute ce script un certains nombres de fois,
l’erreur disparait et le script est bien exécuté !!
J’ai pensé que cela pouvait venir du fait que cle soit un SMALLINT
(5) mais quand je modifie le type de la colonne pour un INT j’ai le
même résultat !

Je comprend pas du tout, si quelqu’un peut m’aider MERCI !

adrien

Génial !!
C’est exactement ce qu’il me fallait, pas une solution miracle, je me
doutais qu’il n’en existe pas mais une méthode pour faire ca
efficacement.
Merci beaucoup :slight_smile:

adrien

Cette erreur ne dit pas :
“Cette clé est dupliquée dans la base alors qu’elle ne devrait pas”
Cette erreur dit :
“Vous essayez d’insérer un enregistrement avec un ID qui est déjÃ
présent,
je refuse de le faire car c’est une clé primaire”

Donc a priori rien à voir avec le type, il faut chercher dans ton script
:
soit tu essaies d’insérer deux fois la même ligne de ton ancienne base,
soit
la table d’arrivée n’est pas totalement vide, soit l’ID était déjÃ
doublé
dans ton ancienne base, soit tu t’es emmêlé les pinceaux quelque part…

Bon courage!
Cdt,

Jean-Baptiste

Le 22 décembre 2009 05:42, Adrien C. [email protected] a
écrit :

Salut,
c’est peut être aussi des contraintes de clé étrangères aveec une autre
table qui serait liée

Le 22 décembre 2009 07:40, Jean-Baptiste B.
<[email protected]

a écrit :

Non rien de tout ca !
La base de donnée qui recoit la clé est COMPLETEMENT vide ( je viens
juste
de faire un rake db:drop db:create ).
Il n’y a aucune contrainte de clé étrangère…
Aucune id n’est doublé dans l’ancienne base.
Et finalement j’ai trouvé la solution : la base CB contenant un
enregistrement avec une cle = 0, si je rajoute une condition pour ne pas
ajouter cet enregistrement, ca marche parfaitement du premier coup, ce
qui
me convient pour le script mais n’explique rien du tout… je suis
perplexe.
Aucune raison que mysql refuse une cle primaire = 0 lorsqu’elle est de
type
INTEGER, d’autant plus en renvoyant l’erreur clé dupliqué…

Merci pour vos réponses

adrien

Le 22 décembre 2009 04:49, samuel [email protected] a écrit :