Re: [HACKERS] Transactions within a function body

From: "Asko Oja" <ascoja(at)gmail(dot)com>
To: "Bob Henkel" <bob(dot)henkel(at)gmail(dot)com>
Cc: "Alvaro Herrera" <alvherre(at)commandprompt(dot)com>, "Gurjeet Singh" <singh(dot)gurjeet(at)gmail(dot)com>, "PGSQL Hackers" <pgsql-hackers(at)postgresql(dot)org>, "Reg Me Please" <regmeplease(at)gmail(dot)com>, "Albe Laurenz" <laurenz(dot)albe(at)wien(dot)gv(dot)at>, "Dennis Brakhane" <brakhane(at)googlemail(dot)com>, pgsql-general(at)postgresql(dot)org
Subject: Re: [HACKERS] Transactions within a function body
Date: 2008-10-03 06:30:46
Message-ID: ecd779860810022330h404babd1ncafc3290d2d826c7@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general pgsql-hackers

On Thu, Oct 2, 2008 at 6:46 PM, Bob Henkel <bob(dot)henkel(at)gmail(dot)com> wrote:

> Have you looked at creating a function in perl and creating a new
> connection? Or using a dblink query which can create a new connection?
> These two methods work. I have used them to insert to a log table regardless
> of the parent transaction being commited or rolled back.
>
> A old example I posted of using pl/perl can be found here ->
> http://www.postgresqlforums.com/forums/viewtopic.php?f=4&t=647
>
> The key is opening a new session which using dblink or pl/perl dbi
> connection will do. This is not ideal or efficient. It would be nice if you
> could just do autonomous transactions natively in pl/pgsql, but I find this
> method works for the cases where you need it(logging, huge batch processing
> tasks where it's not ideal to process everything in one transaction).
>
>
The same can be done with plProxy which is quite efficient but yes opening
connections is not. So if used extensively it would be clever to use
pgBouncer to reuse connections. Thanks for interesting idea.

>
> Bob
>
> "Hi all.
> Is there a way to have (sub)transactions within a function body?
> I'd like to execute some code (a transaction!) inside a function and later
> decide whether that transaction is to be committed or not.
> Thanks."
>
> On Thu, Oct 2, 2008 at 10:40 AM, Alvaro Herrera <
> alvherre(at)commandprompt(dot)com> wrote:
>
>> Gurjeet Singh escribió:
>>
>> > I have seen this feature being asked for, and this work-around suggested
>> so
>> > many times. If plpgql does it internally, why not provide a clean
>> interface
>> > for this? Is there some road-block, or that nobody has ever tried it?
>>
>> Initially we aimed at just exposing SAVEPOINT and ROLLBACK TO in
>> functions, but ran into the problem that the SPI stack needs to be dealt
>> with appropriately and you can't do it if the user is able to modify it
>> arbitrarily by calling transaction-modifying commands. That's when the
>> EXCEPTION idea came up. We never went back and studied whether we could
>> have fixed the SPI limitation, but it's not trivial.
>>
>> --
>> Alvaro Herrera
>> http://www.CommandPrompt.com/ <http://www.commandprompt.com/>
>> The PostgreSQL Company - Command Prompt, Inc.
>>
>> --
>> Sent via pgsql-general mailing list (pgsql-general(at)postgresql(dot)org)
>> To make changes to your subscription:
>> http://www.postgresql.org/mailpref/pgsql-general
>>
>
>

In response to

Browse pgsql-general by date

  From Date Subject
Next Message Gurjeet Singh 2008-10-03 06:57:56 Re: Getting rows in statement-level triggers
Previous Message Artacus 2008-10-03 06:12:05 Re: Getting rows in statement-level triggers

Browse pgsql-hackers by date

  From Date Subject
Next Message Marko Kreen 2008-10-03 07:14:01 Patchworks
Previous Message Pavel Stehule 2008-10-03 05:50:15 Re: using pgfarm for other projects