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 !
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.
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 !
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