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

Hvordan laver jeg en trigger for at opdatere en kolonne i en anden tabel?

mydatabase er et bemærkelsesværdigt uheldigt navn for et skema .

Triggerfunktionen kunne se sådan ud:

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;

Og skal bruges i en trigger på hver relaterede tabel (ikke på trip selv):

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

Du skal også dække INSERT og DELETE (og muligvis COPY ) på alle undertabeller ...

Denne tilgang har mange potentielle fejlpunkter. Som alternativ kan du overveje en forespørgsel eller visning, der beregner den seneste last_updated fra undertabeller dynamisk. Hvis du opdaterer ofte, kan dette være den overlegne tilgang.
Hvis du sjældent UPDATE og SELECT ofte kan din første tilgang betale sig.




  1. Undertryk SQL*PLUS-fejl i batchscript

  2. Er det muligt at forespørge i en kommasepareret kolonne for en bestemt værdi?

  3. Hurtigste måde at gentage en stor tabel ved hjælp af JDBC

  4. CI - vis mig, hvad der gik galt