Re: Strange behavior of transcations

From: Erik Brandsberg <erik(at)heimdalldata(dot)com>
To: "David G(dot) Johnston" <david(dot)g(dot)johnston(at)gmail(dot)com>
Cc: Hui Jackson <jackhts4(at)gmail(dot)com>, pgsql-sql <pgsql-sql(at)lists(dot)postgresql(dot)org>
Subject: Re: Strange behavior of transcations
Date: 2022-06-05 14:37:23
Message-ID: CAFcck8H4OTcQtf0W9p9cyWdrutjsDe3tMiwYzOe1=fNB3D=Zkg@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-sql

Correct, he is reading from the connection while writing to it. Unless all
the rows have been read, you can't use it to do a write, at the protocol
level. Use two connections from the pool for this, one for the read, and
the other for the writes.

On Sun, Jun 5, 2022, 10:29 AM David G. Johnston <david(dot)g(dot)johnston(at)gmail(dot)com>
wrote:

> On Sunday, June 5, 2022, Hui Jackson <jackhts4(at)gmail(dot)com> wrote:
>
>> 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 ]);
>> }
>>
>
>
> I think you are mis-using your pool. If you want transactions you need
> checkout a connection from the pool and use it for every command in the
> transaction. The one-shot query method on the pool is meant for standalone
> commands. I say think because I’m unsure why you’d get no updates instead
> of updates but no transaction…
>
> David J.
>
>

In response to

Browse pgsql-sql by date

  From Date Subject
Next Message Rein Petersen 2022-06-07 23:03:42 losing my mind about sytnax error in window clause
Previous Message David G. Johnston 2022-06-05 14:29:27 Re: Strange behavior of transcations