Триггер PostgreSQL периодически выполняет функцию триггера - PullRequest
0 голосов
/ 07 сентября 2018
-- 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

Триггер и его процедура выполняется, нокаким-то образом он пропускает обновление некоторых строк.

Есть идеи, почему это происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...