mydatabase
är ett anmärkningsvärt olyckligt namn för ett schema .
Triggerfunktionen kan se ut så här:
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;
Och måste användas i en trigger på alla relaterade tabeller (inte på trip
själv):
CREATE TRIGGER upaft_upd_trip
AFTER UPDATE ON mydatabase.trip_detail
FOR EACH ROW EXECUTE PROCEDURE trg_upaft_upd_trip();
Du måste också täcka INSERT
och DELETE
(och möjligen COPY
) på alla undertabeller ...
Detta tillvägagångssätt har många potentiella misslyckanden. Som ett alternativ kan du överväga en fråga eller vy som beräknar den senaste last_updated
från undertabeller dynamiskt. Om du uppdaterar ofta kan detta vara den överlägsna metoden.
Om du sällan UPDATE
och SELECT
ofta kan ditt första tillvägagångssätt löna sig.