我正在使用PostgreSQL 8.1并且我为表创建了一个触发器,因此如果某些内容被更新或插入,它也会在日志表中注册,但我遇到了NULL值的问题:
如果我用NULL值更新一个列,那么它不会向日志中插入任何值,但是使用char到char它会很好,所以也许我错过了一些东西。
表格是这样创建的:
Firebase.getDefaultConfig().setPersistenceEnabled(true);
Firebase ref = new Firebase(apiUrl);
ref.keepSynced(true);
触发器的创建方式如下:
CREATE TABLE log_test(
id_test integer NOT NULL DEFAULT nextval('id_test_seq'),
type char(3),
product char(10),
table char(15),
field char(10),
old_val char(10),
new_val char(10),
user char(10),
event char(10),
date timestamp with time zone NOT NULL DEFAULT now(),
CONSTRAINT "log_test_prim" PRIMARY KEY ("id_test")
);
任何帮助?
答案 0 :(得分:1)
您无法将NULL
与某个值进行比较,即NULL = 2
和NULL <> 2
都是NULL
。添加ISNULL
:
...
IF (TG_OP = ''UPDATE'') THEN
IF (NEW.name <> OLD.name OR NEW.name ISNULL) THEN
INSERT INTO log_test (type, table, field, old_val, new_val, user, event) VALUES (NEW.type, TG_RELNAME, ''name'', OLD.name, NEW.name, NEW.user, ''UPDATE'');
END IF;
...
对于coalesce()
和NEW
记录,或(可能更好)OLD
:
...
IF (TG_OP = ''UPDATE'') THEN
IF (coalesce(NEW.name, '') <> coalesce(OLD.name, '')) THEN
INSERT INTO log_test (type, table, field, old_val, new_val, user, event) VALUES (NEW.type, TG_RELNAME, ''name'', OLD.name, NEW.name, NEW.user, ''UPDATE'');
END IF;
...