Можете да направите 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 колона от главната таблица за всички редове, когато бъде поискано.