Fix HRRR prune timeout: batch delete with 60s timeout instead of full table scan

This commit is contained in:
Graham McIntire 2026-04-01 10:45:09 -05:00
parent b9aac6f688
commit 072c418cb3
No known key found for this signature in database
GPG key ID: F4ABF488E6029E59

View file

@ -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