ON UPDATE CURRENT_TIMESTAMP

Задача формулируется следующим образом:
Необходимо сохранять для записи время модификации в случае, если данные в записи были действительно изменены, но при этом не сравнивая старые и новые значения для каждой колонки?
Сеть завалена совершенно не вменяемыми примерами, решения проблемы при помощи триггера, такого плана:

CREATE OR REPLACE FUNCTION update_modified_column()
	RETURNS TRIGGER AS $$
	BEGIN
	   NEW.modified = now(); 
	   RETURN NEW;
	END;
	$$ LANGUAGE 'plpgsql';
 
CREATE TRIGGER update_customer_modtime BEFORE UPDATE
        ON customer FOR EACH ROW EXECUTE PROCEDURE 
        update_modified_column();

На первый взгляд с примером все отлично, вот только BEFORE UPDATE будет происходит всегда в не зависимости изменились данные или нет.

Может быть есть какой то трюк, позволяющий не вызывать триггер в случае если данные записи не изменились? Или возможно существует готовое правильное решение для этой ситуации?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Правильное решение - на

Правильное решение - на клиенте.
1. Во-первых, не делать UPDATE если данные не изменились
2. Во-вторых, без всяких триггеров просто сразу изменять время модификации записи

Контекст

Реальная ситуация: данные от клиента приходят в виде потока Binary Data, попадают в одно единственное поле (клиент представляет собой аппаратный контроллер) на этой таблице срабатывает триггер данные разбираются и пишутся в разные таблицы (за не имением UPSERT используется INSERT EXCEPTION UPDATE). Правильное решение в том что бы устроить в нём нереальное количество проверок по столбцам?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023