Cú pháp sẽ là:
CREATE TRIGGER tr_total_games
AFTER UPDATE OF game_saved ON game_info
FOR EACH ROW
EXECUTE PROCEDURE total_games();
(Như được ghi trong sách hướng dẫn.)
Nhưng toàn bộ cách tiếp cận là không rõ ràng. Việc cập nhật tổng hợp thông qua trình kích hoạt dễ xảy ra lỗi khi tải ghi đồng thời.
Và không có tải ghi đồng thời, có các giải pháp đơn giản hơn:chỉ cần cộng / trừ 1 từ tổng hiện tại ...
VIEW
sẽ là một sự thay thế đáng tin cậy. Xóa cột game_collection.total_game_count
hoàn toàn - và có thể là toàn bộ bảng game_collection
, mà dường như không có bất kỳ mục đích nào khác. Tạo VIEW
thay vào đó:
CREATE VIEW v_game_collection AS
SELECT user_id, count(*) AS total_game_count
FROM game_info
WHERE game_saved
GROUP BY user_id;
Điều này trả về tất cả người dùng có ít nhất 1 hàng trong game_info
trong đó game_saved IS TRUE
(và bỏ qua tất cả những thứ khác).
Đối với các bảng rất lớn, bạn có thể muốn có MATERIALIZED VIEW
hoặc các giải pháp liên quan để cải thiện hiệu suất đọc.