|
Транзакции в пользовательской функции
|
|||
---|---|---|---|
#18+
Здравствуйте! У меня есть следующий вопрос: Есть следующая функция ( в качестве примера): Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
Вопрос: Как я понимаю возникновение ошибки (в данном случае её я имитировал явным образом с помощью команды Код: plsql 1.
) приводит к откату всего тела функции, т.е. в этом случае можно сказать что тело процедуры является транзакцией? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2018, 11:15 |
|
Транзакции в пользовательской функции
|
|||
---|---|---|---|
#18+
В руководстве написано следующее ( https://postgrespro.ru/docs/postgrespro/9.6/plpgsql-porting ): 42.12.2.1. Неявный откат изменений после возникновения исключения В PL/pgSQL при перехвате исключения в секции EXCEPTION все изменения в базе данных с начала блока автоматически откатываются. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2018, 11:22 |
|
Транзакции в пользовательской функции
|
|||
---|---|---|---|
#18+
ASukhov1986...можно сказать что тело процедуры является транзакцией? это неправильно построенное утверждение. функция (за исключением специальных хаков типа дблинк-а (или автономных транзакций в форке постгрес.про) -- выполняется в той же транзакции, в которой выполнен вызвавший её скл . вложенные транзакции в скл отсутствуют. существует эквивалентная абстракция -- сейвпойнты. в теле плпгскл ф-й это блоки бегин-ендов со встроенными обработчиками. в РТФМ им иногда соответствует понятие "сабтранзакций". вкрапленное довольно редко в описание внутренней кухни. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2018, 11:27 |
|
Транзакции в пользовательской функции
|
|||
---|---|---|---|
#18+
ASukhov1986В руководстве написано следующее ( https://postgrespro.ru/docs/postgrespro/9.6/plpgsql-porting ): 42.12.2.1. Неявный откат изменений после возникновения исключения В PL/pgSQL при перехвате исключения в секции EXCEPTION все изменения в базе данных с начала блока автоматически откатываются.ааа вы о разнице со аракалом, который откатывает только по сбойный стейтмент. да, тут вам придется навтыкать столько вложенных бегин-ендов с обработчиками, сколько вариантов отката вам захочется поиметь. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2018, 11:31 |
|
Транзакции в пользовательской функции
|
|||
---|---|---|---|
#18+
qwwq, как я понимаю: при возникновении ошибки в некоторой команде функции, будут отменены результаты всех предыдущих команд функции до BEGIN (в моем примере это две команды INSERT) и функция завершится с ошибкой, в моем примере третья команда INSERT не выполниться. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2018, 11:41 |
|
Транзакции в пользовательской функции
|
|||
---|---|---|---|
#18+
ASukhov1986qwwq, как я понимаю: при возникновении ошибки в некоторой команде функции, будут отменены результаты всех предыдущих команд функции до BEGIN (в моем примере это две команды INSERT) и функция завершится с ошибкой, в моем примере третья команда INSERT не выполниться. и всех другие стейтменты и вызванные в них ф--ии, которые вызывались в той же транзакции. и вообще -- читайте. напр. https://postgrespro.ru/docs/postgrespro/9.6/plpgsql-control-structures#plpgsql-error-trapping и проверяйте себя тестами. пж -- не оракл. вы можете позволить себе столько тестовых инстансов в каждом утюге, сколько захотите. и чудо--человек дба не понадобится. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.04.2018, 11:50 |
|
|
start [/forum/topic.php?fid=53&fpage=57&tid=1995855]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
29ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 13ms |
total: | 137ms |
0 / 0 |