Możesz wykonać UPDATE FROM
zapytanie wybierające przy użyciu odpowiednich złączeń w wyzwalaczu.
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;
Jedynym zastrzeżeniem korzystania z tej metody jest to, że jeśli ktoś usuwa wiersz lub aktualizacje close
kolumny, wartości muszą zostać ponownie obliczone, co nie nastąpi w przypadku istniejących wierszy. Tylko wstawiony wiersz zobaczy właściwą, ponownie obliczoną wartość.
Zamiast tego możesz po prostu utworzyć View
aby obliczyć sma8
kolumna z głównej tabeli dla wszystkich wierszy na żądanie.