Задача формулируется следующим образом:
Необходимо сохранять для записи время модификации в случае, если данные в записи были действительно изменены, но при этом не сравнивая старые и новые значения для каждой колонки?
Сеть завалена совершенно не вменяемыми примерами, решения проблемы при помощи триггера, такого плана:
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). Правильное решение в том что бы устроить в нём нереальное количество проверок по столбцам?