首页 > 解决方案 > 有没有办法在 Postgres 中执行有条件地触发或不触发先前设置的触发功能的命令?

问题描述

例如,我有一个posts保存用户帖子信息的表,我有一个postlikes保存每个帖子的表。

我已经为postlikes每次添加(插入)或删除(删除)记录设置了触发器。以下是用户与帖子不同(删除记录)时的触发器:

CREATE OR REPLACE FUNCTION decrement_post_like_count() 
RETURNS TRIGGER LANGUAGE plpgsql 
AS $$
BEGIN 
UPDATE posts SET lks=lks-1, upd=DATE_TRUNC('millisecond', localtimestamp) WHERE pid=OLD.pid;
RETURN OLD;
END;
$$;

将触发器添加到调用上述函数的 DELETE 事件:

CREATE TRIGGER on_post_unlike 
AFTER DELETE ON postlikes
FOR EACH ROW EXECUTE FUNCTION decrement_post_like_count();

基本上,每当从postlikes表中删除记录时,触发器都会将表中相应帖子的点赞数 (lks) 减少 1 posts。还有另一个触发器设置,posts只要在表中添加记录,就会增加postlikes表中相应帖子的计数,但它是类似的代码,所以我不在这里显示。

但现在我希望能够在postlikes不调用触发器的情况下对表执行 DELETE,但我想保持触发器功能良好。这是因为我想实现一个帖子删除功能,它应该删除帖子及其所有相应的喜欢。当然,我不希望触发器徒劳地触发,因为我们正在删除帖子。

那么是否有可能设置一个不会触发此功能的标志,如果未设置该标志,那么它将触发该功能。

这里有一个类似的帖子,但我不确定是否要使用这种解决方法,这对于这种情况来说非常乏味或不自然。

我愿意接受建议和其他解决方案。

标签: postgresqltriggersplpgsqlgoogle-cloud-sql

解决方案


推荐阅读