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