Re: Dyamic updates of NEW with pl/pgsql

From: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
To: David Fetter <david(at)fetter(dot)org>
Cc: Andrew Dunstan <andrew(at)dunslane(dot)net>, depesz(at)depesz(dot)com, pgsql-hackers(at)postgresql(dot)org, strk(at)keybit(dot)net
Subject: Re: Dyamic updates of NEW with pl/pgsql
Date: 2010-03-12 18:35:41
Message-ID: 162867791003121035n6a7d991m614fe966bd9bc38a@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

2010/3/12 David Fetter <david(at)fetter(dot)org>:
> On Wed, Mar 10, 2010 at 07:50:16AM -0500, Andrew Dunstan wrote:
>> hubert depesz lubaczewski wrote:
>> >On Tue, Mar 09, 2010 at 06:59:31PM +0100, Pavel Stehule wrote:
>> >>2010/3/9 strk <strk(at)keybit(dot)net>:
>> >>>How can a pl/pgsql trigger change the
>> >>>values of dynamic fields in NEW record ?
>> >>>
>> >>>By "dynamic" I mean that the field name
>> >>>is a variable in the trigger context.
>> >>>
>> >>>I've been told it's easy to do with pl/perl but
>> >>>I'd like to delive a pl/pgsql solution to have
>> >>>less dependencies.
>> >>It isn't possible yet
>> >
>> >well, it's possible. it's just not nice.
>> >
>> >http://www.depesz.com/index.php/2010/03/10/dynamic-updates-of-fields-in-new-in-plpgsql/
>>
>> Using an hstore in 9.0 it's not too bad, Try something like:
>>
>>    CREATE OR REPLACE FUNCTION dyntrig()
>>     RETURNS trigger
>>     LANGUAGE plpgsql
>>    AS $function$
>>
>>    declare
>>            hst hstore;
>>    begin
>>            hst := hstore(NEW);
>>            hst := hst || ('foo' => 'bar');
>>            NEW := populate_record(NEW,hst);
>>            return NEW;
>>    end;
>>
>>    $function$;
>>
>> But this question probably belongs on -general rather than -hackers.
>
> This is, by the way, an excellent argument for including hstore in
> core in 9.1. :)

I like it - but it looking little bit strange - I thinking we need
only one function (maybe with some special support from pl executor)

begin
update_field(NEW, 'field', value);
....

Pavel

>
> Cheers,
> David.
> --
> David Fetter <david(at)fetter(dot)org> http://fetter.org/
> Phone: +1 415 235 3778  AIM: dfetter666  Yahoo!: dfetter
> Skype: davidfetter      XMPP: david(dot)fetter(at)gmail(dot)com
> iCal: webcal://www.tripit.com/feed/ical/people/david74/tripit.ics
>
> Remember to vote!
> Consider donating to Postgres: http://www.postgresql.org/about/donate
>

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message David Fetter 2010-03-12 18:47:45 Re: Dyamic updates of NEW with pl/pgsql
Previous Message Tom Lane 2010-03-12 17:45:43 Re: Reposnse from backend when wrong user/database request send