powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Транзакции в пользовательской функции
7 сообщений из 7, страница 1 из 1
Транзакции в пользовательской функции
    #39625404
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! У меня есть следующий вопрос:
Есть следующая функция ( в качестве примера):
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
create or replace function "METR"."Example"(resultName varchar(20),result smallint)
RETURNS void 
AS $$
BEGIN
    insert into "METR"."RESULT" SELECT resultName,result;
	
	insert into "METR"."RESULT"	SELECT resultName,result;
	
	RAISE  EXCEPTION 'Error!!!!' ;

    insert into "METR"."RESULT" SELECT resultName,result;

END
$$ LANGUAGE plpgsql;



Вопрос:
Как я понимаю возникновение ошибки (в данном случае её я имитировал явным образом с помощью команды
Код: plsql
1.
RAISE  EXCEPTION 'Error!!!!' ;

)
приводит к откату всего тела функции, т.е. в этом случае можно сказать что тело процедуры является транзакцией?
...
Рейтинг: 0 / 0
Транзакции в пользовательской функции
    #39625407
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В руководстве написано следующее ( https://postgrespro.ru/docs/postgrespro/9.6/plpgsql-porting ):
42.12.2.1. Неявный откат изменений после возникновения исключения
В PL/pgSQL при перехвате исключения в секции EXCEPTION все изменения в базе данных с начала блока автоматически откатываются.
...
Рейтинг: 0 / 0
Транзакции в пользовательской функции
    #39625409
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASukhov1986...можно сказать что тело процедуры является транзакцией?
это неправильно построенное утверждение.

функция (за исключением специальных хаков типа дблинк-а (или автономных транзакций в форке постгрес.про) -- выполняется в той же транзакции, в которой выполнен вызвавший её скл .

вложенные транзакции в скл отсутствуют. существует эквивалентная абстракция -- сейвпойнты. в теле плпгскл ф-й это блоки бегин-ендов со встроенными обработчиками. в РТФМ им иногда соответствует понятие "сабтранзакций". вкрапленное довольно редко в описание внутренней кухни.
...
Рейтинг: 0 / 0
Транзакции в пользовательской функции
    #39625411
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASukhov1986В руководстве написано следующее ( https://postgrespro.ru/docs/postgrespro/9.6/plpgsql-porting ):
42.12.2.1. Неявный откат изменений после возникновения исключения
В PL/pgSQL при перехвате исключения в секции EXCEPTION все изменения в базе данных с начала блока автоматически откатываются.ааа вы о разнице со аракалом, который откатывает только по сбойный стейтмент.

да, тут вам придется навтыкать столько вложенных бегин-ендов с обработчиками, сколько вариантов отката вам захочется поиметь.
...
Рейтинг: 0 / 0
Транзакции в пользовательской функции
    #39625414
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq,
как я понимаю:
при возникновении ошибки в некоторой команде функции, будут отменены результаты всех предыдущих команд функции до BEGIN (в моем примере это две команды INSERT) и функция завершится с ошибкой, в моем примере третья команда INSERT не выполниться.
...
Рейтинг: 0 / 0
Транзакции в пользовательской функции
    #39625417
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASukhov1986qwwq,
как я понимаю:
при возникновении ошибки в некоторой команде функции, будут отменены результаты всех предыдущих команд функции до BEGIN (в моем примере это две команды INSERT) и функция завершится с ошибкой, в моем примере третья команда INSERT не выполниться.
и всех другие стейтменты и вызванные в них ф--ии, которые вызывались в той же транзакции.

и вообще -- читайте. напр.
https://postgrespro.ru/docs/postgrespro/9.6/plpgsql-control-structures#plpgsql-error-trapping
и проверяйте себя тестами. пж -- не оракл. вы можете позволить себе столько тестовых инстансов в каждом утюге, сколько захотите. и чудо--человек дба не понадобится.
...
Рейтинг: 0 / 0
Транзакции в пользовательской функции
    #39625426
ASukhov1986
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
qwwq, понятно. спасибо
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Транзакции в пользовательской функции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]