语法错误时PostgreSQL触发

时间:2013-04-15 00:15:16

标签: sql postgresql

我正在尝试创建一个触发器但是当我在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();

3 个答案:

答案 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中