postgresql - 如果一列已更改忽略某些列,则执行 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_at
IS DISTINCT FROM
如果不是,除了分别检查每个单独的列之外,我还有什么其他方法可以实现这一点,这在具有多个列的表上可能会变得很麻烦。
提前致谢
解决方案
推荐阅读
- c# - WPF 在添加新行之前禁用与 DataGrid 的 TemplateColumn 交互
- javascript - 正则表达式 - 查找可以包含字符但不能以字符结尾的模式(javascript)?
- javascript - 如何使用变量为对象属性赋值?
- logstash - logstash,grok - 多行数据后如何匹配可选字段?
- java - '<> 不是抽象的,并且不会覆盖抽象方法 keyReleased',即使没有使用 keyReleased
- android - Layout Inspector - 如何查找文本元素的当前字体
- python - 如何使用 SQLAlchemy 声明性 ORM 在声明的属性上设置索引?
- excel - 从新工作表执行 ADO 宏的问题
- c# - 如何在 Azure IoT Hub c# 中使用设备类型连接字符串注册设备?
- javascript - 将动态形状放置在同一位置