あるプロセスが一意のユーザーIDから残高を選択して挿入を行おうとすると、残高が正しく更新されないと思いますが、別のプロセスがその前に残高を読み取ります。これを修正するにはどうすればよいですか?
CREATE OR REPLACE FUNCTION incBalance(INTEGER, BIGINT) RETURNS void AS $$
DECLARE
balanceRecord record;
newBalance bigint;
BEGIN
FOR balanceRecord IN
SELECT balance FROM users WHERE userid = $1
LOOP
newBalance := balanceRecord.balance + $2;
UPDATE users SET balance = newBalance WHERE userid = $1;
END LOOP;
RETURN;
END;
$$ LANGUAGE plpgsql;