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
|
// 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
|
||||||
|
|||||||
Reference in New Issue
Block a user