Selama Anda hanya membuat perubahan pada baris yang memicu pemicu, jauh lebih mudah (dan lebih murah) untuk menggunakan BEFORE UPDATE
pemicu, yang dapat membuat perubahan pada new.complete_flag
sebelum disimpan ke tabel, daripada harus menjalankan UPDATE
pernyataan setelah itu sudah ada di sana.
Anda juga dapat membatasi pemicu untuk pembaruan bidang tertentu dengan UPDATE OF <column>
klausa dari CREATE TRIGGER
pernyataan.
Hasil akhirnya akan terlihat seperti ini:
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();