sql >> Databáze >  >> RDS >> PostgreSQL

Jak vytvořím spouštěč pro aktualizaci sloupce v jiné tabulce?

mydatabase je pozoruhodně nešťastný název pro schéma .

Spouštěcí funkce může vypadat takto:

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;

A musí být použit ve spouštěči na každém souvisejícím stole (nikoli na trip sám):

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

Musíte také zakrýt INSERT a DELETE (a případně COPY ) na všech podtabulkách ...

Tento přístup má mnoho potenciálních chyb. Jako alternativu zvažte dotaz nebo pohled, který počítá nejnovější last_updated z podtabulek dynamicky. Pokud aktualizujete často, může to být lepší přístup.
Pokud zřídka UPDATE a SELECT často se vám může vyplatit první přístup.




  1. Jak vypsat aktivní připojení na PostgreSQL?

  2. Vypočítejte ujeté kilometry vozidel odečtením od hodnot vozidla

  3. Jak použít stejné připojení pro dva dotazy na jaře?

  4. Rekurzivní SQL pro rozdělení CSV na řádky tabulky