Bug #1473
ferméERREUR Import de la deuxième base
100%
Description
Finalement un premier bug, certaines stations ont été crées 2 fois, avec des collections différentes, par exemple :
Maerl - Molène 1 - 2014 10 14
Fichiers
Mis à jour par Marion Maguer il y a environ 8 ans
- Lié à Feature #1420: Import de la deuxième base /db/seed.rb ajouté
Mis à jour par Jonathan Schaeffer il y a environ 8 ans
On peut repérer les doublons de cette façon :
marben=> SELECT site_id,point_id, date_trunc('day',date) as d, count(1) as count FROM stations GROUP BY d, point_id, site_id HAVING count(1) > 1;
Ensuite il faut identifier les stations qui correspondent au point et à la date et les "fusionner" :
pour la station d'identifiant le plus grand, prendre ses collections et les connecter à l'autre station. Supprimer la station sans collections
Mis à jour par Marion Maguer il y a environ 8 ans
- Lié à Bug #1477: ERREUR Import de la deuxième base #2 ajouté
Mis à jour par Jonathan Schaeffer il y a environ 7 ans
Mis à jour par Jonathan Schaeffer il y a environ 7 ans
- Echéance mis à 15/09/2017
- Assigné à mis à Jonathan Schaeffer
- Version cible mis à Cabestana
Mis à jour par Jonathan Schaeffer il y a environ 7 ans
- Statut changé de Nouveau à Fermé
- % réalisé changé de 0 à 100
J'ai corrigé la base de donnée en fusionnant les stations doublon.
J'ai appliqué ce script pour cela :
query = "SELECT site_id,point_id, date_trunc('day',date) as d, count(1) as count FROM stations GROUP BY d, point_id, site_id HAVING count(1) > 1;" results = ActiveRecord::Base.connection.execute(query) # {"site_id"=>nil, "point_id"=>"72", "d"=>"2014-09-10 00:00:00", "count"=>"2"} results.each do |r| day = r['d'].to_date if r['site_id'].nil? stations = Station.where(point_id: r['point_id']).to_a else stations = Station.where(site_id: r['site_id']).to_a end stations.select!{|s| s.date.to_date == day} stations.sort!{|a,b| a.collections.count <=> b.collections.count} # Normalement on n'a plus que 2 stations puts "Pour le point #{r['point_id']}, on a #{stations.count} stations à la date #{day}: " puts "#{stations[0].collections.count} collections le #{stations[0].date} et" puts "#{stations[1].collections.count} collections le #{stations[1].date}" # Déplacer les collections stations[0].collections.each do |c| c.station = stations[1] c.save end stations[0].delete end
Mis à jour par Jonathan Schaeffer il y a environ 7 ans
Il faut aussi fusionner les collections en double au sein d'une station.
query = "SELECT name,station_id,count(1), string_agg(id::text, ',') FROM collections GROUP BY name, station_id HAVING count(1) > 1;" results = ActiveRecord::Base.connection.execute(query) results.each do |r| collection_ids = r['string_agg'].split(/,/) c1 = Collection.find(collection_ids[0]) c2 = Collection.find(collection_ids[1]) puts "Collection 1 : #{c1.id} :: #{c1.name} :: #{c1.results.count}" puts "Collection 2 : #{c2.id} :: #{c2.name} :: #{c2.results.count}" c2.results.each do |res| res.collection = c1 res.save end c2.delete end