-- this is the trigger --
create trigger vrms_ave_and_irms_total_snr_monitor_trigger
on public.snr_monitor
for each row
execute procedure
public.log_vrms_ave_and_irms_total_on_snr_monitor();
-- this is the stored procedure --
create or replace function
public.log_vrms_ave_and_irms_total_on_snr_monitor()
return trigger as
$body$
begin
update snr_monitor as t1
set
vrms = round(cast(t2.v_average as numeric), 3),
irms = round(cast(t2.i_sum as numeric), 3)
from (
select
device_id
rdts,
avg(vrms) as v_average,
sum(irms) as i_sum
from snr_monitor
where phase < 3
group by device_id, rdts
order by device_id, rdts desc
limit 1
) as t2
where t1.device_id = t2.device_id
and t1.rdts = t2.rdts
and t1.phase = 3;
return null;
end;
$body$
language plpgsql volatile
cost 100;
alter function public.log_vrms_ave_and_irms_total_on_snr_monitor()
owner to postgresadmin;
Триггер наблюдает за той же таблицей, где предполагается выполнить процедуру обновления.
Предполагается обновлять строку, где фаза равна 3, всякий раз, когда происходит вставка в строки, где фаза равна от 0 до 2
Триггер и его процедура выполняется, нокаким-то образом он пропускает обновление некоторых строк.
Есть идеи, почему это происходит?