Убедиться, что баланс постоянно обновляется - PullRequest
0 голосов
/ 30 мая 2019

Это моя схема базы данных, связанная с проблемой.

enter image description here

Это один из триггеров:

CREATE OR REPLACE FUNCTION "public"."update_balance_bet"()
  RETURNS "pg_catalog"."trigger" AS $BODY$
    DECLARE
    currentBalance INTEGER;
    BEGIN

    currentBalance = (SELECT balance FROM "public"."Users" WHERE id=NEW."UserId");
    UPDATE "public"."Users" SET balance=(NEW.amount+currentBalance);
    RETURN NEW;
END
$BODY$

CREATE TRIGGER bet_trigger
    AFTER INSERT ON "public"."Bets"
    FOR EACH ROW
    EXECUTE FUNCTION update_balance_bet();

В основном из моего приложения я вставляю записи в таблицу ставок, бонусов, снятий и депозитов, а остальная часть работы выполняется триггерами.У меня вопрос, будет ли механизм, который я использовал, гарантировать последовательность во всех случаях, или я должен использовать необработанную блокировку?Прав ли я в предположении, что вставка в таблицу ставок - это одна транзакция вместе с балансом обновления триггерной функции, поэтому, если что-то пойдет не так с вставкой в ​​ставки, баланс не будет обновлен ИЛИ если что-то не так с обновлением баланса, новая запись не будет вставлена ​​вТаблица ставок?

...