Du kan lave en UPDATE FROM
din valgforespørgsel ved hjælp af passende joinforbindelser i din Trigger.
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;
Den eneste advarsel ved at bruge denne metode er, at hvis nogen sletter en række eller opdateringer close
kolonne, så skal værdierne genberegnes, hvilket ikke vil ske for eksisterende rækker. Kun den indsatte række vil se den rigtige genberegnet værdi.
I stedet kan du blot oprette View
for at beregne sma8
kolonne fra hovedtabellen for alle rækker, når der anmodes om det.