【发布时间】:2017-07-28 07:56:22
【问题描述】:
我尝试访问作为表列名的循环变量,以获取每列的旧数据和新数据。
CREATE FUNCTION my_function() RETURNS TRIGGER AS $emp_stamp$
DECLARE
current_column_name text;
BEGIN
FOR current_column_name IN
SELECT column_name
FROM information_schema.Columns
WHERE table_schema = TG_TABLE_SCHEMA AND table_name = TG_TABLE_NAME
LOOP
IF (OLD."current_column_name" <> NEW."current_column_name")
then ...
END IF;
END LOOP;
RETURN NEW;
END;
$emp_stamp$ LANGUAGE plpgsql;
CREATE TRIGGER my_trigger
AFTER UPDATE ON my_table FOR EACH ROW
EXECUTE PROCEDURE my_function();
我还有一个错误:ERROR: record "old" has no field "current_column_name"
我尝试不带引号 (""),但得到了相同的结果。
如何访问新旧列数据?
我需要保存所有更改的数据,例如包含以下字段的历史记录:column_name、old_value 和 new_value。
【问题讨论】:
-
如果您想检查 any 列是否已更改,只需使用
if (old is distinct from new)即可,无需遍历所有列。但是您将不知道哪些列是不同的 -
不,我确实想保存所有更改的数据,例如包含以下字段的历史记录:column_name、old_value、new_value
-
请参阅此处:wiki.postgresql.org/wiki/Audit_trigger_91plus 或此处 okbob.blogspot.co.uk/2015/01/… 或此处 8kb.co.uk/blog/2015/01/19/… 以获取一些示例实现
标签: database postgresql triggers plpgsql