2014-11-24 5 views
0

У меня есть таблица с полем временной метки, которая должна обновляться после изменения строки. Функция change_update_time() обновляет поле метки времени, которое называется updated_time. Мой триггер работает нормально, но я не могу добавить еще WHEN статьи (система просто игнорирует их все).Триггер PostgreSQL «КОГДА» не работает

Код:

Это мой триггер:

CREATE TRIGGER update_updated_time_trigger 
    BEFORE UPDATE 
    ON data_table 
    FOR EACH ROW 
    WHEN ( 
    (OLD.column1 <> NEW.column1) AND 
    (OLD.column2 <> NEW.column2) 
) 
    EXECUTE PROCEDURE change_update_time(); 

Это мой триггер функция:

CREATE OR REPLACE FUNCTION change_update_time() 
    RETURNS trigger AS 
$BODY$ 
BEGIN 
    NEW.updated_time = now(); 
    RETURN NEW; 
END;$BODY$ 
    LANGUAGE plpgsql VOLATILE 
    COST 1; 

Database версии: PostgreSQL 9.3.4

+0

Нам нужна таблица определения базовой информации. Что вы получаете с '\ d data_table' в' psql'. –

+0

Предположительно, вы хотите, чтобы 'OLD.colname IS DISTINCT FROM NEW.colname' вместо' OLD.colname <> NEW.colname', иначе триггер не будет выполняться, когда будут задействованы значения NULL. –

+0

Почему вы хотите добавить дополнительные предложения WHEN? Вы уже нашли решение: просто соедините их с 'AND' или' OR'. – pozs

ответ

0

Возможная причина (недостаточно информации, чтобы быть уверенным):

Ваши условия не меняются с/на NULL. Либо column1 и column2 определяются NOT NULL или вам нужно адаптировать:

WHEN (OLD.column1 IS DISTINCT FROM NEW.column1 AND 
     OLD.column2 IS DISTINCT FROM NEW.column2) 

Другой типичной причиной: другие спусковые вмешательства. Вам нужно будет указать все триггеров в вопрос.

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