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
// 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 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
) AS weather_type_id
FROM all_regions ar
) wt
)
INSERT INTO falukant_data.weather (region_id, weather_type_id)
SELECT rw.region_id, rw.weather_type_id