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

postgresql - wyzwalacz, aktualizacja znacznika czasu przy aktualizacji pola

Dopóki wprowadzasz zmiany tylko w wierszu, który uruchomił wyzwalacz, o wiele prostsze (i tańsze) jest użycie BEFORE UPDATE wyzwalacz, który może wprowadzać zmiany w new.complete_flag przed zapisaniem do tabeli, zamiast uruchamiania UPDATE oświadczenie po tym, jak już tam jest.

Możesz również ograniczyć wyzwalacz do aktualizacji określonego pola za pomocą UPDATE OF <column> klauzula CREATE TRIGGER oświadczenie.

Wynik końcowy wyglądałby mniej więcej tak:

CREATE FUNCTION completed_timestamp() RETURNS trigger AS $$
   LANGUAGE plpgsql
BEGIN
  IF new.complete_flag = 1 and old.completed_flag = 0 THEN
    new.complete_time := current_timestamp;
  END IF;
  RETURN new;
END;
$$;

CREATE TRIGGER update_timestamp
BEFORE UPDATE OF completed_flag ON tbl_pXXXX
FOR EACH ROW 
EXECUTE PROCEDURE completed_timestamp();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabele Postgresql istnieją, ale pobieranie relacji nie istnieje podczas wykonywania zapytania

  2. Problem z wiązaniem JOOQ json

  3. Symbol wieloznaczny PostgreSQL LIKE dla dowolnej listy słów

  4. PostgreSQL COPY CSV z dwoma ciągami NULL

  5. Jak obliczyć wykładniczą średnią kroczącą na postgresie?