Можете да направите UPDATE FROM
вашата заявка за избор, като използвате подходящи съединения във вашия тригер.
create or replace function update_sma8() RETURNS TRIGGER AS
$$
BEGIN
UPDATE daily_ohlc d SET sma8 = s.simple_mov_avg
FROM
(
SELECT sec.cdate,AVG(sec.close)
OVER(ORDER BY sec.cdate ROWS BETWEEN 7 PRECEDING AND CURRENT ROW) AS
simple_mov_avg FROM daily_ohlc sec
)s where s.cdate = NEW.cdate --The newly inserted cdate
AND d.cdate = s.cdate;
RETURN NULL;
END $$ language plpgsql;
Единственото предупреждение при използването на този метод е, че ако някой изтрие ред или актуализации close
колона, тогава стойностите трябва да бъдат преизчислени, което няма да се случи за съществуващи редове. Само вмъкнатият ред ще види правилната преизчислена стойност.
Вместо това можете просто да създадете View
за изчисляване на sma8
колона от главната таблица за всички редове, когато бъде поискано.