Miễn là bạn chỉ thực hiện các thay đổi đối với hàng đã kích hoạt trình kích hoạt, thì việc sử dụng BEFORE UPDATE
sẽ đơn giản hơn nhiều (và rẻ hơn) trình kích hoạt, có thể thực hiện thay đổi đối với new.complete_flag
trước khi nó được lưu vào bảng, thay vì phải chạy UPDATE
tuyên bố sau khi nó đã ở đó.
Bạn cũng có thể giới hạn trình kích hoạt đối với các bản cập nhật của một trường cụ thể với UPDATE OF <column>
điều khoản của CREATE TRIGGER
tuyên bố.
Kết quả cuối cùng sẽ giống như sau:
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();