Puoi fare un UPDATE FROM
la tua query selezionata utilizzando i join appropriati nel tuo 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;
L'unico avvertimento sull'utilizzo di questo metodo è che se qualcuno elimina una riga o aggiornamenti close
colonna, quindi i valori devono essere ricalcolati, cosa che non accadrà per le righe esistenti. Solo la riga inserita vedrà il valore ricalcolato corretto.
Invece, puoi semplicemente creare View
per calcolare il sma8
colonna della tabella principale per tutte le righe quando richiesto.