Syntaxe by byla:
CREATE TRIGGER tr_total_games
AFTER UPDATE OF game_saved ON game_info
FOR EACH ROW
EXECUTE PROCEDURE total_games();
Celý přístup je ale pochybný. Udržování aktuálních agregátů pomocí spouštěče je náchylné k chybám při souběžném zatížení zápisu.
A bez souběžného zatížení zápisu existují jednodušší řešení:stačí přidat / odečíst 1 od aktuálního součtu ...
VIEW
bude spolehlivou alternativou. Odstraňte sloupec game_collection.total_game_count
dohromady – a možná i celou tabulku game_collection
, která, jak se zdá, nemá jiný účel. Vytvořte VIEW
místo toho:
CREATE VIEW v_game_collection AS
SELECT user_id, count(*) AS total_game_count
FROM game_info
WHERE game_saved
GROUP BY user_id;
To vrátí všechny uživatele s alespoň 1 řádkem v game_info
kde game_saved IS TRUE
(a vynechá všechny ostatní).
Pro velmi velké stoly můžete chtít MATERIALIZED VIEW
nebo související řešení pro zlepšení výkonu čtení.