PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como faço um gatilho para atualizar uma coluna em outra tabela?


mydatabase é um nome extremamente infeliz para um esquema .

A função de gatilho pode ficar assim:
CREATE OR REPLACE FUNCTION trg_upaft_upd_trip()
  RETURNS TRIGGER AS
$func$
BEGIN

UPDATE mydatabase.trip t    -- "mydatabase" = schema name (?!)
SET    last_updated = now()
WHERE  t.id = NEW.trip_id   -- guessing column names      

RETURN NULL;                -- calling this AFTER UPDATE

END
$func$  LANGUAGE plpgsql;

E precisa ser usado em um gatilho em todas as tabelas relacionadas (não em trip em si):
CREATE TRIGGER upaft_upd_trip
AFTER UPDATE ON mydatabase.trip_detail
FOR EACH ROW EXECUTE PROCEDURE trg_upaft_upd_trip();

Você também precisa cobrir INSERT e DELETE (e possivelmente COPY ) em todas as subtabelas ...

Esta abordagem tem muitos pontos potenciais de falha. Como alternativa, considere uma consulta ou visualização que calcula o último last_updated de subtabelas dinamicamente. Se você atualiza com frequência, essa pode ser a abordagem superior.
Se você raramente UPDATE e SELECT muitas vezes, sua primeira abordagem pode pagar.