postgresql - 文本字段相等

标签 postgresql triggers plpgsql

我有一个表 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/

相关文章:

带有 Sequel Pro 的 MySQL 触发器

sql - 如何在plpgsql中使用变量作为字段类型?

Postgresql,用触发器维护分层数据

python - 如何智能合并Django数据库?

MySQL:没有 SUPER 的触发器/分隔符

json - 构建触发器函数以使用 postgres 处理 json 数据

sql - 使用查询结果设置下一个查询的表

postgresql - 将表数据从一个数据库复制到另一个数据库

sql - 如何用匹配调用 regexp_replace 中的函数?

postgresql - 外部数据包装器缓存机制支持