sql >> Base de Datos >  >> RDS >> PostgreSQL

postgresql:desencadenar, actualizar la marca de tiempo en la actualización del campo

Siempre que solo realice cambios en la fila que activó el activador, es mucho más simple (y económico) usar un BEFORE UPDATE activador, que puede realizar cambios en new.complete_flag antes de que se guarde en la tabla, en lugar de tener que ejecutar UPDATE declaración después de que ya está allí.

También puede limitar el activador a las actualizaciones de un campo en particular con UPDATE OF <column> cláusula de CREATE TRIGGER declaración.

El resultado final se vería así:

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