postgresql - 有没有办法在 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,但我想保持触发器功能良好。这是因为我想实现一个帖子删除功能,它应该删除帖子及其所有相应的喜欢。当然,我不希望触发器徒劳地触发,因为我们正在删除帖子。
那么是否有可能设置一个不会触发此功能的标志,如果未设置该标志,那么它将触发该功能。
这里有一个类似的帖子,但我不确定是否要使用这种解决方法,这对于这种情况来说非常乏味或不自然。
我愿意接受建议和其他解决方案。
解决方案
推荐阅读
- javascript - 如何从时间组件中获取价值并在本机反应中发送到另一个时间组件
- flexbox - Flex - 行反转和换行但没有空格
- python - 从另一个带有争论的python文件执行方法
- node.js - Winston - 文件记录设置
- flutter - Flutter StatefulWidget 参数无法传递
- python - 针对对象绘制 TimeDelta
- hadoop - Qubole 对象的迁移
- node.js - Gatsby CLI npm 包安装不工作
- python - 我需要帮助了解 ANOVA-CV-SVM 管道
- javascript - 如何使用 javascript 连续制作 3 列和 2 列(引导程序)?