On Fri, Apr 8, 2022 at 2:26 PM Laurenz Albe <laurenz.a...@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)

-- 
 Magnus Hagander
 Me: https://www.hagander.net/ <http://www.hagander.net/>
 Work: https://www.redpill-linpro.com/ <http://www.redpill-linpro.com/>

Reply via email to