首页 > 解决方案 > Postgresql 触发器函数

问题描述

我有一个更新查询,

UPDATE tableA SET column1 = $1 WHERE id = $2 AND date < $3

日期为空,尚未设置。我也有触发器

BEFORE UPDATE OF column1 ON tableA FOR EACH ROW EXECUTE FUNCTION functionA()

我的问题是,即使 WHERE 子句中的日期为空,触发器是否会在更新查询之前运行?如果不是,即使日期为空并在函数A 中设置日期,如何让触发器在更新查询之前运行?

标签: postgresqltriggers

解决方案


当日期为空时,您的触发器不会触发。当日期为 NULL 时,条件 "date < $3" 的计算结果为 NULL。“AND”要求两个条件都返回 TRUE,因为 NULL 不是 TRUE,所以不会影响任何行,因为 @GMB 表示触发器不会触发。如果您的触发函数将设置日期列,那么您可能想要:

update tablea 
   set column1 = $1 
 where id = $2 
   and (date < $3 or date is null) ;

推荐阅读