Trình kích hoạt trong Postgres không cung cấp mã trình kích hoạt trực tiếp, nhưng gọi một chức năng kích hoạt , có thể được gọi từ bất kỳ số lượng trình kích hoạt nào, mặc dù chúng thường được tùy chỉnh cho một sự kiện cụ thể trên một bảng cụ thể.
Chức năng kích hoạt:
CREATE OR REPLACE FUNCTION trg_some_tbl_foo()
RETURNS trigger AS
$func$
BEGIN
INSERT INTO some_tbl(key, name, describe) -- or some_other_tbl?
VALUES (OLD.key, OLD.name, OLD.describe);
RETURN OLD;
END
$func$ LANGUAGE plpgsql
CREATE TRIGGER foo -- not: "CREATE OR REPLACE" !
AFTER UPDATE OR DELETE ON some_tbl
FOR EACH ROW EXECUTE PROCEDURE trg_some_tbl_foo()
-
Đặt nó thành
AFTER
kích hoạt để đơn giản hóa. ABEFORE
trình kích hoạt sẽ phảiRETURN NEW
để cập nhật hoạt động, nhưngNEW
không hiển thị trongDELETE
Kích hoạt. Vì vậy, bạn cầnIF TG_OP = ...
vv -
Luôn cung cấp danh sách mục tiêu cho
INSERT
tồn tại các câu lệnh. Điều này cũng tệ trong trình kích hoạt Oracle. -
Bạn có thể có một bảng với
serial
cột. Chỉ cần không đề cập đến nó trong phần chèn, id tiếp theo từ chuỗi sẽ được chèn tự động.
Có rất nhiều ví dụ mã ở đây trên SO.