sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur gör jag en trigger för att uppdatera en kolumn i en annan tabell?

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.




  1. Hur skapar jag en sammanfattning genom att ansluta till en enda tabell med SQL Server?

  2. Regex mönster inuti SQL Ersätt funktion?

  3. Problem med massinsättning av radterminator

  4. Radnummer för frågeresultat grupperade efter en kolumn