2013-04-15 4 views
-1

Я пытаюсь создать триггер, но получаю синтаксическую ошибку, когда использую инструкцию WHEN, как в the CREATE TRIGGER docs.Триггер PostgreSQL при ошибке синтаксиса

Я мог бы, конечно, поставить условие в функции, но я думаю, это было бы намного медленнее и менее красивые

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

PostgreSQL версия? Сообщение об ошибке? (Вы связаны с документами 9.1, но это не обязательно означает, что вы на 9.1). –

ответ

0

Заменить слово, когда со словом где.

+0

Это просто неправильно. Условие на триггере ** определяется через ключевое слово 'when' –

+0

@a_horse_with_no_name Извините, что я пришел WHEN – benehsv

2

Это не будет работать, так как условие WHEN не поддерживает подзапросы (см. Здесь docs).

В зависимости от того, как вы записываете функцию обновления истории, это не должно быть особенно показательным или неэлегантным. Если вас беспокоит очень большой объем записей, есть способы, которые вы можете изучить для оптимизации процесса обновления истории.

+0

Это не сработает и для других условий. – benehsv

Смежные вопросы