sql >> Database >  >> RDS >> PostgreSQL

Hoe maak ik een trigger om een ​​kolom in een andere tabel bij te werken?

mydatabase is een opmerkelijk ongelukkige naam voor een schema .

De triggerfunctie kan er als volgt uitzien:

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;

En moet worden gebruikt in een trigger op elke gerelateerde tafel (niet op trip zelf):

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

Je moet ook INSERT . afdekken en DELETE (en eventueel COPY ) op alle subtafels ...

Deze aanpak heeft veel potentiële faalpunten. Overweeg als alternatief een zoekopdracht of weergave die de laatste last_updated . berekent dynamisch uit subtabellen. Als je vaak bijwerkt, is dit misschien de beste aanpak.
Als je zelden UPDATE en SELECT vaak kan je eerste benadering lonen.




  1. Waarom zouden rijen overeenkomen, maar niet worden gewijzigd met een mysql-update-instructie?

  2. Initiële array in functie om multidimensionale array te aggregeren

  3. Hoe de mysql-database in XAMPP te herstellen?

  4. Hoe markeert u wijzigingen/verschillen in de ene tekstparagraaf van de andere?