PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie mache ich einen Trigger, um eine Spalte in einer anderen Tabelle zu aktualisieren?

mydatabase ist ein bemerkenswert unglücklicher Name für ein Schema .

Die Trigger-Funktion könnte so aussehen:

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;

Und muss in einem Trigger für jede zugehörige Tabelle verwendet werden (nicht für trip selbst):

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

Sie müssen auch INSERT abdecken und DELETE (und eventuell COPY ) auf allen Untertabellen ...

Dieser Ansatz hat viele potenzielle Fehlerquellen. Betrachten Sie als Alternative eine Abfrage oder Ansicht, die das neueste last_updated berechnet aus Untertabellen dynamisch. Wenn Sie häufig aktualisieren, ist dies möglicherweise der bessere Ansatz.
Wenn Sie selten UPDATE und SELECT Oft zahlt sich Ihre erste Annäherung aus.