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

标签 postgresql sql-update database-trigger

我写了下面的触发器:

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 才是正确的?

最佳答案

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

所以你想要

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

关于postgresql - 检测更新不会更改行的触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51342250/

相关文章:

sql - 找到给定时间序列之间最近的重叠

postgresql - Postgres 触发器问题 "ERROR: query "选择新的。 *"returned 12 columns"

sql - 在两个维度上连接两个表而不交叉连接

json - 在postgres中有效地搜索json对象数组

sql-update - 使用 joins informix 更新 sql 查询

sql-server-2008 - 如何设置列值等于行号?

python sqlite3更新从变量设置

mysql - 更新触发器不适用于 json 数据类型

postgresql - 防止删除一个用户的表记录并允许在 postgresql 中删除另一个用户

postgresql - 加入 PostgreSQL 触发器函数的 if 语句