sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo hago un disparador para actualizar una columna en otra tabla?

mydatabase es un nombre notablemente desafortunado para un esquema .

La función de activación podría verse así:

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;

Y debe usarse en un disparador en cada tabla relacionada (no en trip mismo):

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

También debe cubrir INSERT y DELETE (y posiblemente COPY ) en todas las subtablas...

Este enfoque tiene muchos puntos potenciales de falla. Como alternativa, considere una consulta o vista que calcule el último last_updated de subtablas dinámicamente. Si actualiza con frecuencia, este podría ser el mejor enfoque.
Si rara vez UPDATE y SELECT a menudo, su primer acercamiento podría pagar.