Hi,
I need to find all changed fields in a trigger function. I found out how
to get the names of all attributes within plpgsql, but I cannot get the
value of NEW and OLD for the attribute with that name.
That is:
assume there is NEW.foo and OLD.foo
let the name 'foo' be computed and stored in variable attrname:attrname='foo'
Then, if I write NEW.attrname, it is confused with an attribute called
'attrname'.
So how can I get the changed fields in my row?
Please see my function below.
Thank you very much,
Markus
CREATE FUNCTION trg_001() RETURNS OPAQUE AS ' DECLARE rec RECORD;
BEGIN FOR rec IN SELECT a.attname AS atr FROM pg_attribute
a,pg_class c WHERE a.attrelid = c.oid AND a.attnum > 0 AND
c.relname=TG_RELNAME LOOP IF NEW.atr <> OLD.atr THEN INSERT INTO
test(txt) VALUES (rec.atr); END IF; END LOOP; RETURN NEW; END;
' LANGUAGE 'plpgsql';