我正在探索触发器,并且想要创建一个在game_saved
列的Update事件之后触发的触发器。正如我在PostgreSQL docs中读到的,可以为列创建触发器。该列包含boolean
值,因此用户可以将游戏添加到他的收藏或删除它。所以我想要触发函数来计算某个用户在game_saved
列中设置为TRUE的游戏数量。然后在game_collection
表中更新total_game_count
。PostgreSQL在更新特定列后触发
game_collection
id - BIGSERIAL primary key
user_id - INTEGER REFERENCES users(id)
total_game_count - INTEGER
game_info
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
(表),则触发器将正常工作。所以在创建专门用于列更新的触发器时存在一些问题。
在列更新上触发触发器还是应该在此寻找另一种方法是一个好主意?
你引用手册版本9.4的任何原因?你的Postgres版本是什么? –