如果一列已更改,则执行PostgreSQL触发器,忽略某些列
我正在使用下面的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
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___,没有名称感谢您的建议,但是这对于大量列来说往往无法维护。您可以临时更改更新的
列,然后比较,然后重置它。