我试图在pgsql中编写一个触发器函数来跟踪tablea中的值更改(tablea更新后的触发器)。跟踪记录将存储在表B中。
CREATE TABLE TableA (
ID SERIAL NOT NULL,
ANumber integer NOT NULL,
ADate date NOT NULL,
ABoolean boolean NOT NULL
);
-- table for tracking changes
CREATE TABLE TableB (
ID SERIAL NOT NULL,
Description varchar(100) NOT NULL
);
触发程序的主体应该如下所示。。。
IF NEW.ANumber <> OLD.ANumber then
INSERT INTO TableB (Description)
VALUES (CONCAT('The value ', OLD.ANumber, ' changed to ', NEW.ANumber));
RETURN NEW;
END IF;
IF NEW.ABoolean <> OLD.ABoolean then
INSERT INTO TableB (Description)
VALUES (CONCAT('The value changed to ', NEW.ABoolean ));
RETURN NEW;
END IF;
我在pgsql文档中发现,我需要这样创建触发器
CREATE TRIGGER log_changes
AFTER UPDATE ON TableA
FOR EACH ROW
WHEN (OLD.* IS DISTINCT FROM NEW.*)
EXECUTE FUNCTION log_changes();
问题是如果我在表中更改多个列。表B中只有一条新记录对应于发生值更改的第一列。
有什么办法解决这个问题吗?
1条答案
按热度按时间bkhjykvo1#
从if块中取出return语句,如下所示: