Refactor WeatherWorker: Improve weather update query to ensure unique random weather selection for each region using LATERAL join.
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user