Re: transactions not working properly ? - Mailing list pgsql-hackers

From Joshua D. Drake
Subject Re: transactions not working properly ?
Date
Msg-id 4304A190.9080801@commandprompt.com
Whole thread Raw
In response to Re: transactions not working properly ?  (Ali Baba <idofyear@yahoo.com>)
List pgsql-hackers
Ali Baba wrote:

>Hi Michael,
>
>i want to support explicit commit/rollback support
>in pl/pgsql instead of using autocommit feature.
>  
>
The fine manual is your friend:

http://www.postgresql.org/docs/8.0/static/transaction-iso.html
http://www.postgresql.org/docs/8.0/static/tutorial-transactions.html

Sincerely,

Joshua D. Drake



> 
>my requirement is to know how transactions work in
>postgres generally and how to support transaction
>managment in pl/pgsql
> 
>thanks for your help.
> 
>--
>Asif Ali.
> 
> 
>  
>
>>--- Michael Fuhr <mike@fuhr.org> wrote:
>>
>>    
>>
>>>[This question would probably be more appropriate
>>>      
>>>
>>in
>>    
>>
>>>pgsql-general
>>>than in pgsql-hackers.]
>>>
>>>On Wed, Aug 17, 2005 at 05:53:14AM -0700, Ali Baba
>>>wrote:
>>>      
>>>
>>>>can any one describe how the transaction are
>>>>        
>>>>
>>being
>>    
>>
>>>>handled in postgres.
>>>>        
>>>>
>>>I think you're talking about how PL/pgSQL
>>>      
>>>
>>exception
>>    
>>
>>>handlers work
>>>with transactions.  See the documentation:
>>>
>>>
>>>      
>>>
>http://www.postgresql.org/docs/8.0/static/plpgsql-control-structures.html#PLPGSQL-ERROR-TRAPPING
>  
>
>>>>function given below should actually insert the
>>>>        
>>>>
>>>desire
>>>      
>>>
>>>>values in test table but it do not save them.
>>>>        
>>>>
>>>A complete test case would make it easier help. 
>>>      
>>>
>>All
>>    
>>
>>>we see in the
>>>example is the start of a transaction and the
>>>creation of a function --
>>>we don't see how you're actually using it nor what
>>>output (e.g., error
>>>messages) it produces.
>>>
>>>      
>>>
>>>>begin    
>>>>x := 1;    
>>>>insert into test values (210,20);
>>>>x := x/0;
>>>>
>>>>RETURN 0;
>>>>
>>>>exception
>>>>when others then
>>>>    raise info 'error generated ';
>>>>    commit;
>>>>    RETURN 0;
>>>>end;
>>>>        
>>>>
>>>The "Trapping Errors" documentation states:
>>>
>>>  When an error is caught by an EXCEPTION clause,
>>>the local variables
>>>  of the PL/pgSQL function remain as they were
>>>      
>>>
>>when
>>    
>>
>>>the error occurred,
>>>  but all changes to persistent database state
>>>within the block are
>>>  rolled back.
>>>
>>>Since the divide-by-zero error is in the same
>>>      
>>>
>>block
>>    
>>
>>>as the INSERT,
>>>the INSERT is rolled back.  Also, you can't issue
>>>COMMIT inside a
>>>function -- see the "Structure of PL/pgSQL"
>>>documentation:
>>>
>>>
>>>      
>>>
>http://www.postgresql.org/docs/8.0/static/plpgsql-structure.html
>  
>
>>>  Functions and trigger procedures are always
>>>executed within a
>>>  transaction established by an outer query  they
>>>cannot start or
>>>  commit that transaction, since there would be no
>>>context for them
>>>  to execute in.  However, a block containing an
>>>EXCEPTION clause
>>>  effectively forms a subtransaction that can be
>>>rolled back without
>>>  affecting the outer transaction.
>>>
>>>-- 
>>>Michael Fuhr
>>>
>>>---------------------------(end of
>>>broadcast)---------------------------
>>>TIP 4: Have you searched our list archives?
>>>
>>>               http://archives.postgresql.org
>>>
>>>      
>>>
>>__________________________________________________
>>Do You Yahoo!?
>>Tired of spam?  Yahoo! Mail has the best spam
>>protection around 
>>http://mail.yahoo.com 
>>
>>    
>>
>
>
>__________________________________________________
>Do You Yahoo!?
>Tired of spam?  Yahoo! Mail has the best spam protection around 
>http://mail.yahoo.com 
>
>---------------------------(end of broadcast)---------------------------
>TIP 6: explain analyze is your friend
>  
>



pgsql-hackers by date:

Previous
From: Ali Baba
Date:
Subject: Re: transactions not working properly ?
Next
From: Josh Berkus
Date:
Subject: Re: SQL/XML extension