evaluating values of attributes from computed attribute names in trigger function

From: Markus Wagner <wagner(at)imsd(dot)uni-mainz(dot)de>
To: "pgsql-sql(at)postgresql(dot)org" <pgsql-sql(at)postgresql(dot)org>
Subject: evaluating values of attributes from computed attribute names in trigger function
Date: 2001-06-20 12:53:32
Message-ID: 3B309CCC.2CCFA2DB@imsd.uni-mainz.de
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

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';

Browse pgsql-sql by date

  From Date Subject
Next Message Bruno Boettcher 2001-06-20 14:46:36 possible to lock a single row in table?
Previous Message Christof Glaser 2001-06-20 11:03:49 Re: Row Level Locking !!