Синтаксисът би бил:
CREATE TRIGGER tr_total_games
AFTER UPDATE OF game_saved ON game_info
FOR EACH ROW
EXECUTE PROCEDURE total_games(); (Както е документирано в ръководството.)
Но целият подход е съмнителен. Поддържането на агрегатите актуални чрез тригер е предразположено към грешки при едновременно натоварване на запис.
И без едновременно натоварване на запис има по-прости решения:просто добавете/извадете 1 от текущата обща сума...
VIEW
ще бъде надеждна алтернатива. Премахнете колоната game_collection.total_game_count общо - и може би цялата таблица game_collection , което изглежда няма друго предназначение. Създайте VIEW вместо това:
CREATE VIEW v_game_collection AS
SELECT user_id, count(*) AS total_game_count
FROM game_info
WHERE game_saved
GROUP BY user_id;
Това връща всички потребители с поне 1 ред в game_info където game_saved IS TRUE (и пропуска всички останали).
За много големи таблици може да искате MATERIALIZED VIEW
или свързани решения за подобряване на производителността на четене.