【发布时间】:2010-10-03 14:03:00
【问题描述】:
我有两个表(在 postgres 中)- 广告和日志。每次插入日志表后,根据操作,它应该增加 ads 表中列的计数。
我尝试编写触发器将调用的函数,但在尝试创建函数时会引发错误。我是 postgresql 触发器和函数的新手,所以有人可以指出这有什么问题。
create function update_ad_count (action character(4), ad_id INT) returns void
as $$case when action='VIEW' then
(UPDATE ads SET views = (SELECT views+1 FROM ads WHERE id=ad_id), updated = now() WHERE id=ad_id;)
end;$$
language sql
我得到的错误是
ERROR: syntax error at or near "case"
LINE 2: as $$case when action=\'VIEW\' then
^
更新: @Tomalak:感谢功能和更新更新语句(无法抗拒双关语)。
经过大量谷歌搜索后,我了解到该函数不应该有任何参数并使用 NEW.col_name 并且应该返回一个 TRIGGER。
【问题讨论】:
-
我不确定返回触发器的函数是什么。在我的理解中,触发器是定义的,而不是由函数返回的,但是我又不太了解 postgres,所以我很高兴我至少得到了正确的 UPDATE 语句。 ;-)
-
想用您的发现更新我的答案,以便其他通过 Google 来到这里的人找到他们可以立即使用的东西吗?
-
@Tomalak,如果您想了解有关伪类型 TRIGGER 的更多信息,请参阅postgresql.org/docs/8.3/interactive/trigger-definition.html 如果您仍想了解更多信息,您可以提出一个新的 SO 问题,我将在那里提供详细的答案。
-
哦该死的,你还不能编辑其他人的帖子(对不起,我忘了)。不过,您可以将工作示例编辑成您自己的问题。
标签: postgresql triggers