Re: Error handling in plperl and pltcl

Поиск
Список
Период
Сортировка
От Thomas Hallgren
Тема Re: Error handling in plperl and pltcl
Дата
Msg-id thhal-0biOJAi9RcC4NddpwB/VwwL9d+C9cOt@mailblocks.com
обсуждение исходный текст
Ответ на Re: Error handling in plperl and pltcl  (Richard Huxton <dev@archonet.com>)
Ответы Re: Error handling in plperl and pltcl
Список pgsql-hackers
Richard Huxton wrote:

> Can I make some counter-proposals?
>
> 1. Wrap each function body/call (same thing here afaict) in a 
> sub-transaction. An exception can be caught within that function, and 
> all the spi in that function is then rolled back. This is rubbish, but 
> at least it's predictable and allows you to write to a log table and 
> throw another exception.

This will be even worse since it will impose the subtransaction overhead 
on everything, even functions that never do any database access. Perhaps 
this approach would be feasible if imposed on volatile functions only, 
but then again, the volatility of a function cannot be trusted since we 
have no way of defining a "stable but with side effects" type.

> 2. For pl/tcl introduce a pgtry { } catch { } which just starts a 
> sub-transaction and does standard try/catch. I don't use TCL, but from 
> the little I know this should be straightforward.

If you know how to use special constructs like this, what's wrong with 
actually using savepoints verbatim? I.e.

INSERT 1
INSERT 2
SAVEPOINT foo
try { INSERT 3 INSERT 4 RELEASE foo
}
catch WHATEVER { ROLLBACK TO foo INSERT 5 INSERT 6
}

IMHO a very clean, sensible, and easily understood approach that doesn't 
clobber the language.

Regards,
Thomas Hallgren





В списке pgsql-hackers по дате отправления:

Предыдущее
От: Richard Huxton
Дата:
Сообщение: Re: createdb failed
Следующее
От: Richard Huxton
Дата:
Сообщение: Re: Error handling in plperl and pltcl