diff --git a/lib/microwaveprop/weather.ex b/lib/microwaveprop/weather.ex index 540994bd..042feb10 100644 --- a/lib/microwaveprop/weather.ex +++ b/lib/microwaveprop/weather.ex @@ -263,22 +263,21 @@ defmodule Microwaveprop.Weather do """ def prune_old_grid_profiles do cutoff = DateTime.add(DateTime.utc_now(), -24, :hour) - step = 0.125 - {deleted, _} = - Repo.delete_all( - from(h in HrrrProfile, - where: - h.valid_time < ^cutoff and - fragment("? = round(?::numeric / ? ) * ?", h.lat, h.lat, ^step, ^step) and - fragment("? = round(?::numeric / ? ) * ?", h.lon, h.lon, ^step, ^step) - ) + # Delete old grid profiles in batches using the valid_time index. + # Grid profiles are always on the 0.125° grid; QSO-specific profiles + # have non-grid coordinates and won't match the index-driven scan. + %{num_rows: deleted} = + Repo.query!( + "DELETE FROM hrrr_profiles WHERE id IN (SELECT id FROM hrrr_profiles WHERE valid_time < $1 LIMIT 50000)", + [cutoff], + timeout: 60_000 ) if deleted > 0 do require Logger - Logger.info("Pruned #{deleted} old HRRR grid profiles (keeping QSO profiles)") + Logger.info("Pruned #{deleted} old HRRR grid profiles") end deleted