当 NEW.field 为 NULL 时,PostgreSQL 不会触发

koa*_*ala 2 postgresql triggers

我的客户表上有以下触发器,因此我可以跟踪客户名称是否已随时间更改以及名称的先前版本是什么。

CREATE OR REPLACE FUNCTION fn_customer_changes_log_history() RETURNS trigger as 
$BODY$
    BEGIN
       IF (NEW.name <> OLD.name)  
    THEN
        INSERT INTO tbl_customers_history(customer_id, name, action)
        VALUES(OLD.id, OLD.name, 'UPDATE');
    END IF;
RETURN NEW;
END;
$BODY$
LANGUAGE plpgsql;

CREATE TRIGGER tr_customer_changes_log_history
BEFORE UPDATE ON tbl_customers
FOR EACH ROW
EXECUTE PROCEDURE fn_customer_changes_log_history();
Run Code Online (Sandbox Code Playgroud)

但是当我在 NEW.name = NULL 和 OLD.name = "Customer 1" 时执行 UPDATE 时,不会触发此触发器?它仅在 NEW.name 此处具有实际字符串值时触发。

这是为什么?NULL 和“客户 1”不相等所以它应该触发?

Lau*_*lbe 5

IF (NEW.name IS DISTINCT FROM OLD.name)
Run Code Online (Sandbox Code Playgroud)

代替

IF (NEW.name <> OLD.name)
Run Code Online (Sandbox Code Playgroud)