Thread: How to get updated order data

How to get updated order data

From
Andrus
Date:

Hi!

Orders are in table

        create table order (
          dokumnr int primary key,
          packno char(10)
          );
       insert into order dokumnr values (123);

One user sets pack number using

    update order set packno='Pack1' where dokumnr=123

3 seconds later other user retrieves pack number using

    select packno from order where dokumnr=123

However, other user gets null value, not Pack1 as expected. After some time later, correct value Pack1 is returned.

How to get updated data from other user immediately?
3 seconds is long time, it is expected that select suld retrieve update data.

There are lot of transactions running concurrently. Maybe update command is not written to database if second user retrieves it.

How to flush orders table so that current results are returned for second user select ?

Using

PostgreSQL 13.2, compiled by Visual C++ build 1914, 64-bit

and psqlODBC driver.

Andrus.

Re: How to get updated order data

From
Laurenz Albe
Date:
On Thu, 2022-04-07 at 16:16 +0300, Andrus wrote:
> Orders are in table
> 
>          create table order ( 
>            dokumnr int primary key,
>            packno char(10)
>            );
>         insert into order dokumnr values (123);
> 
>  One user sets pack number using
> 
>      update order set packno='Pack1' where dokumnr=123
> 
>  3 seconds later other user retrieves pack number using
> 
>      select packno from order where dokumnr=123
> 
>  However, other user gets null value, not Pack1 as expected. After some time later, correct value Pack1 is returned.
> 
>  How to get updated data from other user immediately?
>  3 seconds is long time, it is expected that select suld retrieve update data.
> 
>  There are lot of transactions running concurrently. Maybe update command is not written to database if second user
retrievesit.
 
> 
>  How to flush orders table so that current results are returned for second user select ?
> 
>  Using 
>   PostgreSQL 13.2, compiled by Visual C++ build 1914, 64-bit
>   and psqlODBC driver.

That cannot happen, unless

a) the UPDATE runs in a transaction that hasn't been committed

b) the SELECT is running on a standby server, and there is replication lag

Yours,
Laurenz Albe

-- 
Cybertec | https://www.cybertec-postgresql.com




Re: How to get updated order data

From
Magnus Hagander
Date:


On Fri, Apr 8, 2022 at 2:26 PM Laurenz Albe <laurenz.albe@cybertec.at> wrote:
On Thu, 2022-04-07 at 16:16 +0300, Andrus wrote:
> Orders are in table
>
>          create table order (
>            dokumnr int primary key,
>            packno char(10)
>            );
>         insert into order dokumnr values (123);
>
>  One user sets pack number using
>
>      update order set packno='Pack1' where dokumnr=123
>
>  3 seconds later other user retrieves pack number using
>
>      select packno from order where dokumnr=123
>
>  However, other user gets null value, not Pack1 as expected. After some time later, correct value Pack1 is returned.
>
>  How to get updated data from other user immediately?
>  3 seconds is long time, it is expected that select suld retrieve update data.
>
>  There are lot of transactions running concurrently. Maybe update command is not written to database if second user retrieves it.
>
>  How to flush orders table so that current results are returned for second user select ?
>
>  Using 
>   PostgreSQL 13.2, compiled by Visual C++ build 1914, 64-bit
>   and psqlODBC driver.

That cannot happen, unless

a) the UPDATE runs in a transaction that hasn't been committed

b) the SELECT is running on a standby server, and there is replication lag

There's also:

c) The SELECT runs in a transaction stat *started* before the transaction that a runs in. (Assuming it then retries with a new transaction later, that is)

--