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

postgresql - Auslöser, Zeitstempel bei Feldaktualisierung aktualisieren

Solange Sie nur Änderungen an der Zeile vornehmen, die den Trigger ausgelöst hat, ist es viel einfacher (und billiger), ein BEFORE UPDATE zu verwenden Trigger, der Änderungen an new.complete_flag vornehmen kann bevor es in der Tabelle gespeichert wird, anstatt ein UPDATE ausführen zu müssen Anweisung, nachdem es bereits drin ist.

Sie können den Trigger auch mit UPDATE OF <column> auf Aktualisierungen eines bestimmten Felds beschränken -Klausel des CREATE TRIGGER Aussage.

Das Endergebnis würde in etwa so aussehen:

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();