我正在探索触发器,并希望创建一个在
game_saved
列的更新事件之后触发的触发器。根据我在PostgreSQL文档中所读到的,可以为列创建触发器。该列包含boolean
值,因此用户可以添加或删除游戏。因此,我想让触发器函数计算某个用户在 game_saved
列中设置为 TRUE 的游戏数量。然后更新 game_collection
表中的 total_game_count
。
game_collection
id - BIGSERIAL primary key
user_id - INTEGER REFERENCES users(id)
total_game_count - INTEGER
游戏信息
id - BIGSERIAL primary key
user_id - INTEGER REFERENCES users(id)
game_id - INTEGER REFERENCES games(id)
review - TEXT
game_saved - BOOLEAN
以下是我的触发器(它没有起作用,我希望找出原因):
CREATE OR REPLACE FUNCTION total_games()
RETURNS TRIGGER AS $$
BEGIN
UPDATE game_collection
SET total_game_count = (SELECT COUNT(CASE WHEN game_saved THEN 1 END)
FROM game_info WHERE game_collection.user_id = game_info.user_id)
WHERE user_id = NEW.user_id;
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER tr_total_games
AFTER UPDATE OF game_saved FOR EACH ROW
EXECUTE PROCEDURE total_games();
如果我将 AFTER UPDATE OF game_saved
(列)更改为 AFTER UPDATE ON game_info
(表),触发器会正常工作。因此,创建一个特定于列更新的触发器存在一些问题。
在列更新时触发触发器是否是个好主意?还是我应该寻找另一种方法?