文本字段平等

时间:2012-04-26 22:39:29

标签: postgresql triggers plpgsql

我有一个带有文本字段栏的表格foo。在那张桌子上,我有一个更新后的触发器,基本上如下:


CREATE OR REPLACE FUNCTION update_foo() 
RETURNS TRIGGER
SECURITY DEFINER
AS
$_$
DECLARE 
BEGIN
  IF TG_OP = 'UPDATE' and NEW.bar = OLD.bar THEN
    return NEW;
  END IF;

  /* Do some stuff */

END
$_$
LANGUAGE PLPGSQL;

然后我做这样的事情:Update foo set bar = bar || '';

但是当文本值相等时,它不会保释。

我的问题是为什么PostgreSQL 8.3不会,特别是pl / PgSQL将它们称为等同并提前纾困?

免责声明:表格,字段和变量名称已从原始名称更改为允许在线发布。

1 个答案:

答案 0 :(得分:3)

这是因为其中一个值为null。 并且null不能等于任何其他值,

所以你需要添加额外的标准

(New.bar is  null or Old.bar is null)

  NEW.bar is not distinct from OLD.bar