Syntaksen ville være:
CREATE TRIGGER tr_total_games
AFTER UPDATE OF game_saved ON game_info
FOR EACH ROW
EXECUTE PROCEDURE total_games();
(Som dokumenteret i manualen.)
Men hele tilgangen er tvivlsom. At holde aggregater opdateret via trigger er tilbøjelige til fejl under samtidig skrivebelastning.
Og uden samtidig skrivebelastning er der enklere løsninger:bare læg til / træk 1 fra den aktuelle total ...
En VIEW
ville være et pålideligt alternativ. Fjern kolonnen game_collection.total_game_count
i alt - og måske hele bordet game_collection
, som ikke synes at have noget andet formål. Opret en VIEW
i stedet:
CREATE VIEW v_game_collection AS
SELECT user_id, count(*) AS total_game_count
FROM game_info
WHERE game_saved
GROUP BY user_id;
Dette returnerer alle brugere med mindst 1 række i game_info
hvor game_saved IS TRUE
(og udelader alle andre).
For meget store borde vil du måske have en MATERIALIZED VIEW
eller relaterede løsninger til at forbedre læseydelsen.