我有一个带有文本字段栏的表格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将它们称为等同并提前纾困?
免责声明:表格,字段和变量名称已从原始名称更改为允许在线发布。
答案 0 :(得分:3)
这是因为其中一个值为null。 并且null不能等于任何其他值,
所以你需要添加额外的标准
(New.bar is null or Old.bar is null)
或
NEW.bar is not distinct from OLD.bar