Обсуждение: Transaction Handling in pl/pgsql?

Поиск
Список
Период
Сортировка

Transaction Handling in pl/pgsql?

От
"Nee.mem(倪明)"
Дата:
pgsql-general,
    

   On 7/12/05, Craig Bryden <postgresql ( at ) bryden ( dot ) co ( dot ) za> wrote:
> Hi
> 
> I am trying to get a better understanding of how transactions work in
> pl/pgsql functions. I found the following text in the help:
> "It is important not to confuse the use of BEGIN/END for grouping statements
> in PL/pgSQL with the database commands for transaction control. PL/pgSQL's
> BEGIN/END are only for grouping; they do not start or end a transaction"
> but I am still a bit confused.
> 
> Suppose I have a function that will be called from an application. Will all
> the statements in the function be rolled back if the last one generates an
> exception? or do I need to add code to a function to make that happen?
> 
> 

>suppose you have: select your_function(); 

>your_function adds some rows but the last one gives an error, because
>all statements that are out of a transaction block are in its own
>transaction the select calling your_function is inside a
>transaction... so, the answer is yes... the statements inside the
>function will be rolled back



How to use rollback  work in pl/pgsql functions.? Give an example 


Re: Transaction Handling in pl/pgsql?

От
"Joshua D. Drake"
Дата:
>>your_function adds some rows but the last one gives an error, because
>>all statements that are out of a transaction block are in its own
>>transaction the select calling your_function is inside a
>>transaction... so, the answer is yes... the statements inside the
>>function will be rolled back
>

Unless you are using savepoints in 8.x, any error you generate will
automatically cause the need to rollback.

If you are using savepoints you can rollback to a specific point of
a parent transaction.



Sincerely,

Joshua D. Drake


>
>
>
> How to use rollback  work in pl/pgsql functions.? Give an example
>
>
> ---------------------------(end of broadcast)---------------------------TIP 5: don't forget to increase your free
spacemap settings 


--
Your PostgreSQL solutions provider, Command Prompt, Inc.
24x7 support - 1.800.492.2240, programming, and consulting
Home of PostgreSQL Replicator, plPHP, plPerlNG and pgPHPToolkit
http://www.commandprompt.com / http://www.postgresql.org

Re: Transaction Handling in pl/pgsql?

От
Neil Conway
Дата:
Joshua D. Drake wrote:
> If you are using savepoints you can rollback to a specific point of
> a parent transaction.

Although you can't use savepoints (explicitly) in functions. PL/PgSQL
exceptions (which are actually implemented internally via savepoints)
can be used to achieve a similar effect.

-Neil