From: | "Pavel Stehule" <pavel(dot)stehule(at)gmail(dot)com> |
---|---|
To: | "Martin Edlman" <edlman(at)fortech(dot)cz> |
Cc: | pgsql-sql(at)postgresql(dot)org |
Subject: | Re: pl/PgSQL, variable names in NEW |
Date: | 2008-04-07 12:11:23 |
Message-ID: | 162867790804070511y7266c911w370db97a78c3c519@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-docs pgsql-hackers pgsql-sql |
Hello
no, it's not possible in plpgsql. Please, use plperl or plpython.
Regards
Pavel Stehule
On 07/04/2008, Martin Edlman <edlman(at)fortech(dot)cz> wrote:
> Hello,
>
> is it possible to use variables as field names in the NEW record?
> Let's suppose I have a varchar attname containg the name of the field and I
> want to know a value that field of the NEW record.
>
> Problem is that I get an error 'record "new" has no field "attname"'. Of
> course I want to use a value of NEW.author when col.attname = attname =
> 'author'.
>
> Is there a solution?
>
> Example trigger function. It finds all columns in the table which are
> referenced in other tables and checks if the value of the column has
> changed. If yes, then invoke some other function. The problem is that the
> column name is in the 'col' record and is different during the loop and at
> each function call.
>
> CREATE OR REPLACE FUNCTION replace_values() RETURNS trigger AS
> $BODY$
> DECLARE
> col record;
> attname varchar;
> BEGIN
> FOR col IN
> SELECT DISTINCT pgaf.attname, pgaf.attnum
> FROM pg_constraint, pg_attribute AS pgaf
> WHERE pg_constraint.contype = 'f' -- fkey
> AND pg_constraint.confrelid = TG_RELID -- table oid
> AND pgaf.attrelid = TG_RELID
> AND pgaf.attnum = ANY(pg_constraint.confkey) LOOP
>
> attname := col.attname;
> IF NEW.attname <> OLD.attname THEN
> RAISE NOTICE ' value changed from "%" to
> "%"', OLD.attname, NEW.attname;
> -- INVOKE OTHER FUNCTION
> END IF;
> END LOOP;
>
> END;
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE;
>
> --
> Martin Edlman
> Fortech Ltd.
> 57001 Litomysl, CZ
>
> --
> Sent via pgsql-sql mailing list (pgsql-sql(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-sql
>
From | Date | Subject | |
---|---|---|---|
Next Message | Martin Edlman | 2008-04-08 11:06:47 | Re: pl/PgSQL, variable names in NEW |
Previous Message | Martin Edlman | 2008-04-07 11:19:39 | pl/PgSQL, variable names in NEW |
From | Date | Subject | |
---|---|---|---|
Next Message | Paul van den Bogaard | 2008-04-07 12:45:53 | CLogControlLock |
Previous Message | Martin Edlman | 2008-04-07 11:19:39 | pl/PgSQL, variable names in NEW |
From | Date | Subject | |
---|---|---|---|
Next Message | luke.78@libero.it | 2008-04-07 12:30:51 | Problem commit in function |
Previous Message | Martin Edlman | 2008-04-07 11:19:39 | pl/PgSQL, variable names in NEW |