-- 013_geocode_dirty_trigger.sql -- Auto-requeue du géocodage quand location_text change en DB. -- -- Avant ce trigger, un changement de localisation (déménagement détecté par le -- crawler incrémental) laissait les anciennes band_locations en place — rien ne -- les invalidait. On supprime les band_locations du band concerné dès que son -- location_text change réellement ; le daemon enqueue (déclenchement manuel + -- scan périodique de rattrapage, voir enqueue.py) reparse le texte et recrée -- les steps. Resync complet (pas de diff fin) : simple et sûr, le cache -- (geocode_cache + le fast-path dedup par (lieu,pays) dans band_locations) -- absorbe le coût pour les lieux déjà vus ailleurs. CREATE OR REPLACE FUNCTION bands_geocode_dirty() RETURNS trigger AS $$ BEGIN IF TG_OP = 'UPDATE' AND OLD.location_text IS DISTINCT FROM NEW.location_text THEN DELETE FROM band_locations WHERE ma_id = NEW.ma_id; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; DROP TRIGGER IF EXISTS trg_bands_geocode_dirty ON bands; CREATE TRIGGER trg_bands_geocode_dirty AFTER UPDATE OF location_text ON bands FOR EACH ROW EXECUTE FUNCTION bands_geocode_dirty();