Это моя схема базы данных, связанная с проблемой.
Это один из триггеров:
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();
В основном из моего приложения я вставляю записи в таблицу ставок, бонусов, снятий и депозитов, а остальная часть работы выполняется триггерами.У меня вопрос, будет ли механизм, который я использовал, гарантировать последовательность во всех случаях, или я должен использовать необработанную блокировку?Прав ли я в предположении, что вставка в таблицу ставок - это одна транзакция вместе с балансом обновления триггерной функции, поэтому, если что-то пойдет не так с вставкой в ставки, баланс не будет обновлен ИЛИ если что-то не так с обновлением баланса, новая запись не будет вставлена вТаблица ставок?