PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

postgresql - trigger, aggiornamento timestamp sull'aggiornamento del campo

Finché stai apportando modifiche solo alla riga che ha attivato il trigger, è molto più semplice (ed economico) utilizzare un BEFORE UPDATE trigger, che può apportare modifiche a new.complete_flag prima che venga salvato nella tabella, invece di dover eseguire un UPDATE dichiarazione dopo che è già lì.

Puoi anche limitare il trigger agli aggiornamenti di un campo particolare con il UPDATE OF <column> clausola del CREATE TRIGGER dichiarazione.

Il risultato finale sarebbe simile a questo:

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