PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment créer un déclencheur pour mettre à jour une colonne dans une autre table ?

mydatabase est un nom remarquablement malheureux pour un schéma .

La fonction de déclenchement pourrait ressembler à ceci :

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;

Et doit être utilisé dans un déclencheur sur chaque table associée (pas sur trip lui-même):

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

Vous devez également couvrir INSERT et DELETE (et éventuellement COPY ) sur toutes les sous-tables...

Cette approche présente de nombreux points de défaillance potentiels. Comme alternative, considérez une requête ou une vue qui calcule le dernier last_updated à partir de sous-tables de manière dynamique. Si vous mettez souvent à jour, cela pourrait être l'approche la plus efficace.
Si vous UPDATE rarement et SELECT souvent, votre première approche peut être payante.