postgresql - postgresSQL 如何仅在更新的行上应用触发器?
问题描述
我正在尝试创建一个函数+触发器,当我的表上有一个名为“nada”的更新或插入时,它会将我的“modif”属性更新为当前日期。
代码运行良好,但所有行都受到影响。我只想要更新行的当前日期。
任何想法 ?
到目前为止,这是我的代码:
CREATE OR REPLACE FUNCTION public.maj_modif()
RETURNS "trigger" AS
$BODY$
BEGIN
NEW.modif:= (SELECT current_date);
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS maj_modif ON public.nada;
CREATE TRIGGER maj_modif BEFORE INSERT OR UPDATE ON public.nada
FOR EACH ROW
EXECUTE PROCEDURE public.maj_modif();
如果我在触发器中尝试没有“FOR EACH ROW”的相同代码,我会得到这个错误:«新»尚未受到影响(...)注册行的结构尚未确定。
解决方案
我假设您只希望在实际更改任何列时触发触发器。
这可以做到
CREATE TRIGGER maj_modif BEFORE UPDATE ON public.nada
FOR EACH ROW
WHEN OLD <> NEW
EXECUTE PROCEDURE public.maj_modif();
这仅适用于UPDATE
,因为INSERT
OLD
未定义 on 。定义不带子句的INSERT
触发器。WHEN
推荐阅读
- reactjs - 是否可以使用 redux-form、connect 和 withRouter?
- javascript - 未处理的拒绝(SyntaxError):意外的令牌 < 在 JSON 中的位置 0 React
- angular - 如何在 highcharts 中使用 dblclick 事件?
- php - DataTables 不显示数据
- java - 使用可更新片段构建 ViewPager
- c# - 为什么我的内存超出限制?C#
- sdn - 为什么我的 OpenFlow 匹配与第一个数据包不匹配?
- r - “变换”中的“拟合”论点接受什么?
- php - 在 Woocommerce 购物车、结帐和订单上显示并保存添加的自定义购物车项目数据
- excel - 这不能应用于所选范围。VBA 上的运行时错误