Sintaksnya adalah:
CREATE TRIGGER tr_total_games
AFTER UPDATE OF game_saved ON game_info
FOR EACH ROW
EXECUTE PROCEDURE total_games();
(Seperti yang didokumentasikan dalam manual.)
Tetapi seluruh pendekatannya meragukan. Menjaga agregat tetap terbarui melalui pemicu rentan terhadap kesalahan di bawah beban tulis bersamaan.
Dan tanpa beban tulis bersamaan, ada solusi yang lebih sederhana:cukup tambahkan / kurangi 1 dari total saat ini ...
VIEW
akan menjadi alternatif yang dapat diandalkan. Hapus kolom game_collection.total_game_count
semuanya - dan mungkin seluruh tabel game_collection
, yang tampaknya tidak memiliki tujuan lain. Buat VIEW
sebagai gantinya:
CREATE VIEW v_game_collection AS
SELECT user_id, count(*) AS total_game_count
FROM game_info
WHERE game_saved
GROUP BY user_id;
Ini mengembalikan semua pengguna dengan setidaknya 1 baris di game_info
di mana game_saved IS TRUE
(dan menghilangkan yang lainnya).
Untuk tabel yang sangat besar, Anda mungkin menginginkan MATERIALIZED VIEW
atau solusi terkait untuk meningkatkan kinerja membaca.