PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come faccio a creare un trigger per aggiornare una colonna in un'altra tabella?

mydatabase è un nome straordinariamente sfortunato per uno schema .

La funzione di attivazione potrebbe essere simile a questa:

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 deve essere utilizzato in un trigger su ogni tabella correlata (non su trip stesso):

CREATE TRIGGER upaft_upd_trip
AFTER UPDATE ON mydatabase.trip_detail
FOR EACH ROW EXECUTE PROCEDURE trg_upaft_upd_trip();

Devi anche coprire INSERT e DELETE (ed eventualmente COPY ) su tutte le sottotabelle ...

Questo approccio ha molti potenziali punti di errore. In alternativa, considera una query o una vista che calcola l'ultimo last_updated da sottotabelle in modo dinamico. Se aggiorni spesso questo potrebbe essere l'approccio migliore.
Se esegui raramente UPDATE e SELECT spesso, il tuo primo approccio potrebbe ripagare.