Возможно ли закомитить часть операций внутри функции?

Есть функция синхронизации, которая запускает несколько функций, например f1, f2, f3.
Возможно ли каким либо способом сделать COMMIT внутри функции синхронизации так, чтобы при данные коммитились после каждой вызываемой функции?

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

А в чём

А в чём сложность-то?
BEGIN
вызов функции
COMMIT

Так и делал.

Примерный код вызывающей функции:

BEGIN

execute f1();
commit;
execute f2();
commit;
execute f3();

END;

Такой код нармально работает при отладке, но при запуске в рилтайм завершает ошибкой:
ERROR: SPI_execute_plan failed executing query "COMMIT": SPI_ERROR_TRANSACTION

Может я что-то неправильно делаю, или настройки СУБД надо изменить.

Что неправильно делаете? А

Что неправильно делаете?
А почитать что такое BEGIN и END?
Внутри одного транзакционного блока не может быть несколько COMMIT

Прочитал

Это понятно, что BEGIN END транзакционный (в документации операционный) блок.

Тело тестовой функции pl/pgsql:

BEGIN
  BEGIN
    EXECUTE public.f1();
    COMMIT;
  END;
  BEGIN
    EXECUTE public.f2();
    COMMIT;
  END;
END;

Пытался для каждого внутреннего блока BEGIN END проставлять метки.
Во всех случаях тестовая функция компилируется, отрабатывает полностью в режиме отладки. Но при попытке запустить функцию вываливается ошибка.

Подскажите, что я делаю неправильно?

Последняя строчка моего

Последняя строчка моего предыдущего ответа. Читайте внимательно, пожалуйста.

Отсюда вывод

Если брать во внимание, что в одном блоке BEGIN END может быть только один COMMIT, то выходит, что в функции нельзя делать промежуточные коммиты так как вся функция обернута в один блок BEGIN END. Правильно ли я понял?

Да. Что значит промежуточный

Да. Что значит промежуточный COMMIT если мы говорим о транзакции? Транзакция - это АТОМАРНАЯ операция, т.е. не может быть полтранзакции или четверть - она вся либо есть, либо нет. Вы же внутри одной транзакции пытаетесь сделать другую - разумеется это нельзя.

Опции просмотра комментариев

Выберите предпочитаемый вами способ показа комментариев и нажмите "Сохранить настройки" для активации изменений.

Back to top

(С) Виктор Вислобоков, 2008-2023