首页 > 解决方案 > 如果一列已更改忽略某些列,则执行 PostgreSQL 触发器

问题描述

我正在使用下面的 PostgreSQL 触发器函数创建一个审计表

CREATE OR replace FUNCTION company_change_audit() RETURNS TRIGGER AS $$ 
BEGIN
    IF OLD IS DISTINCT FROM NEW THEN
        INSERT INTO history.companies(name, email, logo, phone_number, alt_phone_number, company_id) VALUES (OLD.name, OLD.email, OLD.logo, OLD.phone_number, OLD.alt_phone_number, OLD.id);
    END IF;
    RETURN NEW;
END;
$$ LANGUAGE 'plpgsql';

问题是带有触发器的表具有在updated_at更新行时更改的字段,这导致OLD IS DISTINCT FROM NEW无法工作,因此在检查行是否实际更改时可以忽略该列吗?updated_atIS DISTINCT FROM

如果不是,除了分别检查每个单独的列之外,我还有什么其他方法可以实现这一点,这在具有多个列的表上可能会变得很麻烦。

提前致谢

标签: postgresqldatabase-trigger

解决方案


推荐阅读