Можете ли вы иметь блок транзакции в рутине? - PullRequest
0 голосов
/ 19 ноября 2018

Я пытаюсь создать подпрограмму с блоком транзакций, но оператор 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 */
$$;

Спасибо!

...