Re: Indirect access to NEW or OLD records - Mailing list pgsql-general

From Dmitry Koterov
Subject Re: Indirect access to NEW or OLD records
Date
Msg-id d7df81620809251156x16c59c8br98434105e50e05b0@mail.gmail.com
Whole thread Raw
In response to Re: Indirect access to NEW or OLD records  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-general
I have tried plperl, but the following sample does not work:

CREATE FUNCTION "extract_field_as_varchar" (rec record, field varchar)
RETURNS varchar AS
$body$
...
$body$
LANGUAGE 'plperl' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

It says "ERROR:  plperl functions cannot take type record".

So, I cannot ever create an utility function to call it as:

value := extract_field_as_varchar(NEW, 'field');

Seems I have to write an entire trigger in plperl to access NEW record
indirectly?




On Thu, Sep 25, 2008 at 10:08 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> "Dmitry Koterov" <dmitry@koterov.ru> writes:
>> I have a variable with a field name and want to extract this field
>> value from NEW record:
>
>> DECLARE
>>     field VARCHAR = 'some_field';
>> BEGIN
>>     ...
>>     value := NEW.{field};  -- ???
>> END;
>
>> Is it possible in pl/pgsql?
>
> No.  Quite aside from the lack of syntax for that, plpgsql would be
> unhappy if the data type wasn't the same on successive executions.
>
> Use one of the less strongly typed PLs instead.  I believe this is
> pretty easy in plperl or pltcl.  (Maybe plpython too, but I don't know
> that language.)
>
>                        regards, tom lane
>
> --
> Sent via pgsql-general mailing list (pgsql-general@postgresql.org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general
>

pgsql-general by date:

Previous
From: Raymond O'Donnell
Date:
Subject: Re: My first revoke
Next
From: "Scott Marlowe"
Date:
Subject: Re: ease of use sync