U kunt een UPDATE FROM
. doen uw geselecteerde zoekopdracht met behulp van de juiste joins in uw 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;
Het enige voorbehoud bij het gebruik van deze methode is dat als iemand verwijdert een rij of updates close
kolom, dan moeten de waarden opnieuw worden berekend, wat niet gebeurt voor bestaande rijen. Alleen de ingevoegde rij zal de juiste herberekende waarde zien.
In plaats daarvan kunt u eenvoudig View
. maken om de sma8
. te berekenen kolom uit de hoofdtabel voor alle rijen op verzoek.