Синтаксисът би бил:
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
или свързани решения за подобряване на производителността на четене.