我有一个简单的函数,在更新PostgreSQL 14表时触发:
CREATE OR REPLACE FUNCTION track_changes() RETURNS TRIGGER AS $body$
BEGIN
raise notice 'old is: "%"', OLD;
raise notice 'new is: "%"', NEW;
END;
$body$
LANGUAGE plpgsql
;
CREATE TRIGGER update_trigger
AFTER UPDATE ON students
FOR EACH ROW EXECUTE PROCEDURE track_changes();
但是,该函数旨在用于许多不同的表-即我不知道哪些栏目是可用的。我如何在触发器函数中计算OLD
和NEW
之间不同的列集-例如作为record
或row
或甚至JSONB
值?
2条答案
按热度按时间2guxujil1#
你必须查询元数据:
ndh0cuux2#
下面是一个基于JSONB的建议。将
new
和old
转换为JSONB,以便提取键(这些是表的列名)并迭代它们。