代码之家  ›  专栏  ›  技术社区  ›  tom

检测更新不会更改行的触发器

  •  0
  • tom  · 技术社区  · 8 年前

    我写了以下触发器:

    CREATE FUNCTION trig_func() RETURNS trigger AS $$
      BEGIN
        IF NEW = OLD
        THEN -- update would do nothing, doing something...
        END IF;
        RETURN NEW;
      END;
    $$ LANGUAGE plpgsql;
    CREATE TRIGGER trig BEFORE UPDATE ON some_table
      FOR EACH ROW EXECUTE PROCEDURE trig_func();
    

    它清楚地表明了我想要达到的目标,但是什么才是合适的 NEW = OLD ?

    1 回复  |  直到 8 年前
        1
  •  2
  •   a_horse_with_no_name    8 年前

    这个 is distinct from 运算符可以比较完整的行,并将正确处理空值。

    所以你想要

    if new is not distinct from old then 
       ...
    end if;