Składnia byłaby następująca:
CREATE TRIGGER tr_total_games
AFTER UPDATE OF game_saved ON game_info
FOR EACH ROW
EXECUTE PROCEDURE total_games();
(Zgodnie z dokumentacją w instrukcji.)
Ale całe podejście jest wątpliwe. Utrzymywanie aktualności agregatów za pomocą wyzwalacza jest podatne na błędy przy jednoczesnym obciążeniu zapisu.
A bez współbieżnego obciążenia zapisu istnieją prostsze rozwiązania:po prostu dodaj / odejmij 1 od bieżącej sumy ...
VIEW
byłaby niezawodną alternatywą. Usuń kolumnę game_collection.total_game_count
w sumie - a może cały stół game_collection
, co nie wydaje się mieć żadnego innego celu. Utwórz VIEW
zamiast tego:
CREATE VIEW v_game_collection AS
SELECT user_id, count(*) AS total_game_count
FROM game_info
WHERE game_saved
GROUP BY user_id;
Zwraca wszystkich użytkowników z co najmniej 1 wierszem w game_info
gdzie game_saved IS TRUE
(i pomija wszystkie inne).
W przypadku bardzo dużych tabel możesz potrzebować MATERIALIZED VIEW
lub powiązane rozwiązania poprawiające wydajność odczytu.