-1

我正在尝试创建触发器,但是当我使用 WHEN 语句(如 docs 中)时出现语法CREATE TRIGGER错误

我当然可以将条件放在函数中,但我想这会慢很多而且不太漂亮

CREATE TRIGGER insert_test
AFTER INSERT
ON mountain_stats
FOR EACH ROW
WHEN(NOT EXISTS(SELECT * 
FROM mountain_stats_history
WHERE country=NEW.country AND key=NEW.key AND value=NEW.value))
EXECUTE PROCEDURE update_mountain_stats_history();
4

3 回答 3

2

这不起作用,因为 WHEN 条件不支持子查询(请参阅此处的文档)。

根据您编写历史更新函数的方式,它不应该特别显眼或不优雅。如果您担心写入量非常大,您可以探索一些技术来优化历史更新过程。

于 2013-04-15T02:18:29.177 回答
0

将单词 when 替换为 where 单词。

于 2013-04-15T01:28:27.257 回答
0

我以为我运行的是 9.1,但实际上我只运行 8.4 并且那里不支持 WHEN 子句。 http://www.postgresql.org/docs/8.4/static/sql-createtrigger.html 我需要将条件放入UDF

于 2013-04-15T07:37:33.397 回答