PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak ustawić wyzwalacz, aby zaktualizować kolumnę w innej tabeli?

mydatabase to wyjątkowo niefortunna nazwa dla schematu .

Funkcja wyzwalania może wyglądać tak:

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;

I musi być używany w wyzwalaczu w każdej powiązanej tabeli (nie w trip sam):

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

Musisz także pokryć INSERT i DELETE (i ewentualnie COPY ) we wszystkich podtablicach ...

Takie podejście ma wiele potencjalnych punktów niepowodzenia. Alternatywnie rozważ zapytanie lub widok, który oblicza najnowsze last_updated z podtabeli dynamicznie. Jeśli często aktualizujesz, może to być lepsze podejście.
Jeśli rzadko UPDATE i SELECT często pierwsze podejście może się opłacać.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przekształć znacznik czasu na czas lokalny dla danej strefy czasowej podczas „KOPIUJ .. DO ..”

  2. PostgreSQL - relacja [tabela] nie istnieje

  3. Zrozumienie i czytanie katalogu systemu PostgreSQL

  4. Jak zainstalować PyGreSQL przy użyciu Virtualenv na Mac OS Sierra?

  5. Zapobiegaj wyzwalaniu rekurencyjnemu w PostgreSQL