Есть такая триггерная функция
CREATE OR REPLACE FUNCTION update()
RETURNS trigger AS $$
BEGIN
NEW.f1 := some_value();
NEW.updated_at := now(); -- now() будет выполняться на каждой строке?
RETURN NEW;
END;
$$ LANGUAGE plpgsql VOLATILE
И триггер
CREATE TRIGGER tg_update
BEFORE INSERT OR UPDATE
ON my_table
FOR EACH ROW
EXECUTE PROCEDURE update();
Хочу сделать несколько оптимизаций для лучшей производительности:
1) поле updated_at должно обновляться только при операции UPDATE
проверять TG_OP или делать дополнительный триггер или еще как-то, что будет эффективней? Тут важно, чтобы эффективней работал UPDATE, INSERT не критичен.
2) если триггер выполняется на большем кол-ве строк операция now() будет вызываться на каждой из них? Может можно както определить переменную, в которую поместить результат now() перед вызовом триггера ? Или както через систему правил создать дополнительный запрос, или ... ?
Если честно, только вчера сел читать документацию по триггерам и процедурным языкам и пока не очень соображаю)