我有一个表 foo,里面有一个文本字段栏。在那张 table 上我有一个更新后的触发器,基本上是这样的:
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 不平等地调用它们并尽早退出?
免责声明:表、字段和变量名称已从原来的名称更改为允许在线发布。
最佳答案
这将是因为其中一个值为空。 并且 null 不能等于任何其他值,
所以你需要添加额外的条件
(New.bar is null or Old.bar is null)
或者
NEW.bar is not distinct from OLD.bar
关于postgresql - 文本字段相等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10342412/