Strange behavior of transcations

Поиск
Список
Период
Сортировка
От Hui Jackson
Тема Strange behavior of transcations
Дата
Msg-id CAHXAyjyT2zDt9Ozq-VnM80x7f3tm0yJt3uUaWCkR8bfLvfLwJA@mail.gmail.com
обсуждение исходный текст
Ответы Re: Strange behavior of transcations
Список pgsql-sql
I am working on node-postgres and there is a strange transactions.
The function aims at locking user's wallet until the refund process is complete, then will update item's has_refund to true.
The problem I am facing is the program return no error, but the database is not updated. Unless I spam the function for multiple times then the value is updated.
If I remove begin and commit, then the function work perfectly.
const refundService = (itemId) =>{
    await pgPool.query('BEGIN;');
    const users = (await pgPool.query('SELECT * from app_user where $1=ANY(purchase_list);', [ itemId ])).rows;
    for(let i = 0; i < users.length; i++){
        refund(users[i])
    }
    await pgPool.query('UPDATE item_lists SET has_refund = $1 where id = $2;', [true,  itemId ]);
    await pgPool.query('COMMIT;');
}
   
const refund = (user) =>{
    const refund = 10
    await pgPool.query('UPDATE app_user SET wallet = wallet + $1', [refund ]);
}

В списке pgsql-sql по дате отправления:

Предыдущее
От: Hui Jackson
Дата:
Сообщение: Re: Using Transaction with if-else in prepared statement
Следующее
От: "David G. Johnston"
Дата:
Сообщение: Re: Strange behavior of transcations