如果更新后整行保持不变,如何签入触发器?

Mat*_*ari 12 postgresql trigger

当然,我可以像这样对每一列进行比较:

if (old.column1 = new.column1 and old.column2 = new.column2...)
Run Code Online (Sandbox Code Playgroud)

但是,例如,如果我将来添加另一列,它将是硬编码的并且难以维护。

有没有办法检查所有列是否保持不变而无需手动检查每个单独的列?

a_h*_*ame 17

您可以简单地比较oldnew使用is not distinct from哪个正确处理 NULL 值的记录(如果所有列都定义为 NOT NULL,您可以简单地使用=or <>

if old is not distinct from new then 
   .... do something
end if;
Run Code Online (Sandbox Code Playgroud)

同样可以检查是否至少一列发生了变化:

if old is distinct from new then 
   .... do something
end if;
Run Code Online (Sandbox Code Playgroud)