[BDD] Migration

292 views
Skip to first unread message

Adrien Coquio

unread,
Dec 19, 2009, 7:42:17 PM12/19/09
to Railsfrance
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


Bruno Michel

unread,
Dec 20, 2009, 7:38:53 AM12/20/09
to rails...@googlegroups.com
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] http://github.com/nono/migration-linuxfr.org

++
Bruno

Message has been deleted

Adrien Coquio

unread,
Dec 20, 2009, 2:44:58 PM12/20/09
to Railsfrance
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 :)

adrien

Message has been deleted

Jean-Baptiste Barth

unread,
Dec 22, 2009, 1:40:07 AM12/22/09
to rails...@googlegroups.com
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 Coquio <adrien...@gmail.com> a écrit :
Je me retrouve devant un problème incompréhensible (jusqu'à ce que je
trouve/on me donne la solution ;-) )
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
--
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse rails...@googlegroups.com
Pour résilier votre abonnement envoyez un e-mail à l'adresse railsfrance...@googlegroups.com

samuel

unread,
Dec 22, 2009, 3:49:06 AM12/22/09
to rails...@googlegroups.com
Salut,
c'est peut être aussi des contraintes de clé étrangères aveec une autre table qui serait liée

Adrien Coquio

unread,
Dec 22, 2009, 9:18:29 AM12/22/09
to rails...@googlegroups.com
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
Reply all
Reply to author
Forward
0 new messages