You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL存储过程中OLD与NEW前缀的用法及代码示例疑问解答

关于PostgreSQL触发器中OLD和NEW变量的用法详解

先给你明确一下:OLD 和 NEW 其实是PostgreSQL触发器函数里的特殊行变量(你提到的“存储过程”其实这里应该是绑定触发器的函数,普通存储过程里是没有这两个变量的哦),它们的含义完全取决于触发的数据库操作类型:

  • 当触发的是INSERT操作时:NEW 代表即将插入的全新记录,OLD 是不存在的(如果强行调用会报错)
  • 当触发的是UPDATE操作时:OLD 对应更新前的原记录(包含所有字段的旧值),NEW 对应更新后的新记录(包含所有字段的新值,也就是即将替换原记录的那条)
  • 当触发的是DELETE操作时:OLD 代表即将被删除的原记录,NEW 不存在(强行调用同样会报错)

再结合你贴的代码片段来具体解释:

IF (MY_VARIABLE = 'UPDATE' AND (OLD.user_code != NEW.user_code OR NEW.log_time != false)) THEN 
    SELECT name,lastname INTO target_name,target_lastname FROM users.user WHERE user_code = OLD.user_code; 
ENDIF

这段代码的上下文是UPDATE操作触发的场景:

  • OLD.user_code 就是你理解的那样——这条记录更新前的user_code原有值
  • NEW.user_code 是这条记录更新后的user_code新值
  • NEW.log_time 则是这条记录更新后的log_time字段值,代码里在判断它是否不等于false

整个逻辑的意思是:当执行UPDATE操作时,如果要么user_code字段被修改了,要么log_time被改成了非false的值,就根据更新前的user_code去users.user表中查询对应的姓名和姓氏,并存入target_name和target_lastname变量中。

内容的提问来源于stack exchange,提问作者sasori

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 19:07:32