diff --git a/03-other-functions.sql b/03-other-functions.sql
index 42b9105a4807332d056ff77b75fc220969b5f588..1646ec89f064d9300db2db72c46dea31932babb4 100644
--- a/03-other-functions.sql
+++ b/03-other-functions.sql
@@ -69,3 +69,24 @@ SELECT '/' || string_agg(name, '/') FROM (
     ) SELECT name FROM paths ORDER BY LEVEL DESC
 ) AS names
 $func$ LANGUAGE sql;
+
+-- Trigger function that automatically updates start time and end time of jobs at phase update.
+-- This could be performed by business logic of each application that handles jobs but relying directly on the database ensures a better uniformity.
+
+CREATE OR REPLACE FUNCTION job_phase_updated() RETURNS TRIGGER 
+AS 
+$func$
+BEGIN
+    IF new.phase = 'EXECUTING' THEN
+        new.start_time := NOW();
+    ELSIF new.phase = 'COMPLETED' OR new.phase = 'ERROR' OR new.phase = 'ABORTED' THEN
+        new.end_time := NOW();
+    END IF;
+    RETURN new;
+END;
+$func$ LANGUAGE plpgsql;
+
+CREATE TRIGGER job_update
+    BEFORE UPDATE OF phase ON job
+    FOR EACH ROW
+    EXECUTE PROCEDURE job_phase_updated();