Refactor WeatherWorker: Improve weather update query to ensure unique random weather selection for each region using LATERAL join.

This commit is contained in:
Torsten Schulz (local)
2025-12-09 13:51:02 +01:00
parent cddf701af1
commit 433259da74

View File

@@ -12,7 +12,9 @@ pub struct WeatherWorker {
// Query zum Aktualisieren des Wetters für alle Regionen // 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 // 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#" const QUERY_UPDATE_WEATHER: &str = r#"
WITH all_regions AS ( WITH all_regions AS (
SELECT DISTINCT r.id AS region_id SELECT DISTINCT r.id AS region_id
@@ -21,15 +23,14 @@ const QUERY_UPDATE_WEATHER: &str = r#"
WHERE tr.label_tr = 'city' WHERE tr.label_tr = 'city'
), ),
random_weather AS ( random_weather AS (
SELECT SELECT ar.region_id, wt.id AS weather_type_id
ar.region_id, FROM all_regions ar
( CROSS JOIN LATERAL (
SELECT wt.id SELECT wt.id
FROM falukant_type.weather wt FROM falukant_type.weather wt
ORDER BY RANDOM() ORDER BY RANDOM()
LIMIT 1 LIMIT 1
) AS weather_type_id ) wt
FROM all_regions ar
) )
INSERT INTO falukant_data.weather (region_id, weather_type_id) INSERT INTO falukant_data.weather (region_id, weather_type_id)
SELECT rw.region_id, rw.weather_type_id SELECT rw.region_id, rw.weather_type_id