mydatabase
to wyjątkowo niefortunna nazwa dla schematu .
Funkcja wyzwalania może wyglądać tak:
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;
I musi być używany w wyzwalaczu w każdej powiązanej tabeli (nie w trip
sam):
CREATE TRIGGER upaft_upd_trip
AFTER UPDATE ON mydatabase.trip_detail
FOR EACH ROW EXECUTE PROCEDURE trg_upaft_upd_trip();
Musisz także pokryć INSERT
i DELETE
(i ewentualnie COPY
) we wszystkich podtablicach ...
Takie podejście ma wiele potencjalnych punktów niepowodzenia. Alternatywnie rozważ zapytanie lub widok, który oblicza najnowsze last_updated
z podtabeli dynamicznie. Jeśli często aktualizujesz, może to być lepsze podejście.
Jeśli rzadko UPDATE
i SELECT
często pierwsze podejście może się opłacać.