Về cơ bản, chúng tôi muốn tạo TRIGGER cho mỗi bảng mà chúng tôi muốn được thông báo cho hoạt động CẬP NHẬT / XÁC NHẬN / XÓA. Khi trình kích hoạt này kích hoạt, nó sẽ thực thi một chức năng đơn giản sẽ nối một hàng mới (mã hóa sự kiện) vào bảng nhật ký mà sau đó chúng ta sẽ thăm dò ý kiến từ một dịch vụ bên ngoài.
Đó là một cách sử dụng khá chuẩn cho một kích hoạt.
Trước khi thực hiện tất cả với Postgres TRIGGER (s), chúng tôi muốn biết quy mô của chúng: chúng tôi có thể tạo bao nhiêu kích hoạt trên một cài đặt Postgres?
Nếu bạn tiếp tục tạo chúng, cuối cùng bạn sẽ hết dung lượng đĩa.
Không có giới hạn cụ thể cho các kích hoạt.
Giới hạn PostgreSQL được ghi lại trên trang về .
Chúng có ảnh hưởng đến hiệu suất truy vấn không?
Nó phụ thuộc vào loại kích hoạt, ngôn ngữ kích hoạt và những gì kích hoạt làm.
Một trình BEFORE ... FOR EACH STATEMENT
kích hoạt PL / PGQuery đơn giản không làm bất cứ điều gì có chi phí gần như bằng không.
FOR EACH ROW
kích hoạt có chi phí cao hơn so với FOR EACH STATEMENT
kích hoạt. Rõ ràng, tỷ lệ, với số lượng hàng bị ảnh hưởng.
AFTER
kích hoạt đắt hơn BEFORE
kích hoạt bởi vì chúng phải được xếp hàng cho đến khi câu lệnh kết thúc thực hiện công việc của nó, sau đó được thực thi. Chúng không bị đổ vào đĩa nếu hàng đợi trở nên lớn (ít nhất là trong 9,4 trở xuống, có thể thay đổi trong tương lai) vì vậy AFTER
hàng đợi kích hoạt lớn có thể khiến bộ nhớ khả dụng bị tràn ngập, dẫn đến hủy bỏ tuyên bố.
Một kích hoạt sửa đổi NEW
hàng trước khi chèn / cập nhật rẻ hơn so với kích hoạt DML.
Trường hợp sử dụng cụ thể mà bạn muốn sẽ hoạt động tốt hơn với sự cải tiến đang diễn ra có thể biến nó thành PostgreQuery 9.5 (nếu chúng ta may mắn), trong đó các FOR EACH STATEMENT
trình kích hoạt có thể thấy ảo OLD
và NEW
bảng. Điều này là không thể trong các phiên bản PostgreSQL hiện tại, vì vậy bạn phải sử dụng các FOR EACH ROW
kích hoạt thay thế.
Có ai trước đây đã thử điều này?
Tất nhiên. Đó là một cách sử dụng khá chuẩn cho các trình kích hoạt, cùng với kiểm toán, kiểm tra độ tỉnh táo, v.v.
Bạn sẽ muốn xem xét LISTEN
và NOTIFY
tìm cách tốt để đánh thức nhân viên của bạn khi thay đổi bảng nhiệm vụ xảy ra.
Bạn đã làm điều quan trọng nhất bằng cách tránh nói chuyện với các hệ thống bên ngoài trực tiếp từ các trình kích hoạt. Điều đó có xu hướng có vấn đề về hiệu suất và độ tin cậy. Mọi người thường cố gắng làm những việc như gửi thư trực tiếp từ một trình kích hoạt, và đó là tin xấu.