如果一列已更改,则执行PostgreSQL触发器,忽略某些列

如果一列已更改,则执行PostgreSQL触发器,忽略某些列,postgresql,database-trigger,Postgresql,Database Trigger,我正在使用下面的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) VA

我正在使用下面的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\u字段,每当更新一行时该字段就会更改,这导致
旧的与新的
不同,因此在检查行是否实际更改时,是否可以忽略
更新的
列从

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


提前感谢

您需要列出所有列:
如果(old.c1,old.c2,old.c3)与(new.c1,new.c2,new.c3)不同,那么…
@a_horse___,没有名称感谢您的建议,但是这对于大量列来说往往无法维护。您可以临时更改
更新的
列,然后比较,然后重置它。