-- Přepnutí profilu bazální spotřeby bez EMA ocasu z předchozích běhů: -- smaže řádky consumption_baseline_stats a znovu je naplní fn_update_baseline_stats. create or replace function ems.fn_rebuild_consumption_baseline_stats( p_site_id int default null, p_lookback_days int default 30 ) returns table ( site_id int, buckets_upserted int ) language plpgsql volatile as $fn$ declare r record; begin if p_lookback_days is null or p_lookback_days < 1 then raise exception using message = 'p_lookback_days musí být kladný int (např. 30)', errcode = '22023'; end if; if p_site_id is null then delete from ems.consumption_baseline_stats; for r in select s.id as sid from ems.site s order by s.id loop site_id := r.sid::int; buckets_upserted := ems.fn_update_baseline_stats(r.sid::int, p_lookback_days); return next; end loop; return; end if; if not exists (select 1 from ems.site s where s.id = p_site_id) then raise exception using message = format('site_id %s neexistuje v ems.site', p_site_id), errcode = 'P0001'; end if; delete from ems.consumption_baseline_stats c where c.site_id = p_site_id; site_id := p_site_id; buckets_upserted := ems.fn_update_baseline_stats(p_site_id, p_lookback_days); return next; end; $fn$; comment on function ems.fn_rebuild_consumption_baseline_stats is 'Maze řádky v consumption_baseline_stats pro jednu site (nenull p_site_id) nebo celou tabulku při p_site_id NULL, pak pro každý ems.site volá fn_update_baseline_stats. Řeší zaseknutí starého avg díky EMA 70/30 v fn_update. Příklad jedné lokality: select * from ems.fn_rebuild_consumption_baseline_stats(2, 30); všechny lokality: select * from ems.fn_rebuild_consumption_baseline_stats(null::int, 14); Nepředávej jen jednu číslici bez pojmenovaných argumentů — první pozice je site_id ne lookback.';