Я пытаюсь создать подпрограмму с блоком транзакций, но оператор BEGIN подпрограммы конфликтует с оператором начала транзакции.
Возможно ли иметь транзакцию внутри подпрограммы в postgres, чтобы в случае сбоя одного оператора все откатывалось?
Я пытаюсь сделать что-то вроде этого:
CREATE FUNCTION transfer_money_from_user_to_user(payer_id BIGINT, payee_id BIGINT)
RETURNS TABLE(id INTEGER)
LANGUAGE plpgsql
AS $$
BEGIN
/* transaction start */
update user_money set user_money = user_money - 100 where user_money.id = payer_id;
update user_money set user_money = user_money + 100 where user_money.id = payee_id;
/* transaction end */
$$;
Спасибо!