Я использовал функции postgres и plpgsql для реализации бизнес-логики веб-приложения.
Мое промежуточное программное обеспечение вызывает plpgsql - функции.Эти plpgsql-функции вызывают другие функции plpgsql, которые выполняют транзакции, такие как обновления, вставки, удаления и т. Д.
Я добавил ниже псевдокод, чтобы проиллюстрировать логику.
Предположим, sub_function_1 и sub_function_2 выполняются без ошибок.sub_function_3 выдает ошибку и сталкивается с исключением.
Поскольку транзакции sub_function_1 и sub_function_2 имеют смысл только в том случае, если sub_function_3 также выполняется без ошибки, я хотел бы выполнить откат для транзакции sub_function_1 и sub_function_2, если sub_function_3 приводит к ошибке.
Можно ли отменить / откатить транзакцию sub_function_1 и sub_function_2 после их успешного выполнения, если sub_function_3 столкнулась с ошибкой?
create or replace function root_function()
begin
-- do some transactions through performing sub_function_1
perform sub_function_1();
-- do here some other transactions
-- do some transactions through performing sub_function_2
perform sub_function_2();
-- do some transactions through performing sub_function_3
perform sub_function_3();
return 'successful';
exception when others then
return 'failed';
end;