diff --git a/src/worker/weather.rs b/src/worker/weather.rs index e9a7dc8..b0313e7 100644 --- a/src/worker/weather.rs +++ b/src/worker/weather.rs @@ -12,7 +12,9 @@ pub struct WeatherWorker { // Query zum Aktualisieren des Wetters für alle Regionen // Wählt für jede Region ein zufälliges Wetter aus allen verfügbaren Wettertypen aus -// Wichtig: Jede Region bekommt ein individuelles, zufälliges Wetter +// Wichtig: Jede Region bekommt ein individuelles, zufälliges Wetter. Die vorherige +// Variante konnte vom Planner unter Umständen die Zufalls-Subquery nur einmal +// auswerten; mit LATERAL wird die Zufallsauswahl pro Region garantiert ausgeführt. const QUERY_UPDATE_WEATHER: &str = r#" WITH all_regions AS ( SELECT DISTINCT r.id AS region_id @@ -21,15 +23,14 @@ const QUERY_UPDATE_WEATHER: &str = r#" WHERE tr.label_tr = 'city' ), random_weather AS ( - SELECT - ar.region_id, - ( - SELECT wt.id - FROM falukant_type.weather wt - ORDER BY RANDOM() - LIMIT 1 - ) AS weather_type_id + SELECT ar.region_id, wt.id AS weather_type_id FROM all_regions ar + CROSS JOIN LATERAL ( + SELECT wt.id + FROM falukant_type.weather wt + ORDER BY RANDOM() + LIMIT 1 + ) wt ) INSERT INTO falukant_data.weather (region_id, weather_type_id) SELECT rw.region_id, rw.weather_type_id