我正在尝试创建一个触发器但是当我在the CREATE TRIGGER
docs中使用WHEN语句时出现语法错误。
我当然可以把这个条件放在函数中,但我想这会慢很多而且不太漂亮
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();
答案 0 :(得分:2)
这不起作用,因为WHEN条件不支持子查询(请参阅此处的docs)。
根据您编写历史更新功能的方式,它不应该特别显示或不优雅。如果您担心写入量非常大,可以使用一些技术来优化历史记录更新过程。
答案 1 :(得分:0)
将单词where替换为。
答案 2 :(得分:0)
我以为我在运行9.1但实际上我只运行8.4并且那里不支持WHEN子句。 http://www.postgresql.org/docs/8.4/static/sql-createtrigger.html 我需要将条件放在UDF中