Re: Unexpected query result

From: Begin Daniel <jfd553(at)hotmail(dot)com>
To: Adrian Klaver <adrian(dot)klaver(at)aklaver(dot)com>, "pgsql-general(at)postgresql(dot)org" <pgsql-general(at)postgresql(dot)org>
Subject: Re: Unexpected query result
Date: 2015-10-05 13:39:15
Message-ID: COL129-W79992DDEBA0B794A7F36A494480@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Thank Adrian, it makes sense. I'll adapt the calling procedures Daniel

> Subject: Re: [GENERAL] Unexpected query result
> To: jfd553(at)hotmail(dot)com; pgsql-general(at)postgresql(dot)org
> From: adrian(dot)klaver(at)aklaver(dot)com
> Date: Mon, 5 Oct 2015 06:17:33 -0700
>
> On 10/05/2015 05:02 AM, Begin Daniel wrote:
> > In order to process a large amount of data I need to run a procedure
> > using parallel batch processes.
> > The query I run in each process is expected to ...
> >
> > 1- select a bunch of id (500) in a table (wait4processing) containing
> > the list of all records to process
> > 2- remove selected records from wait4processing table in order to
> > eliminate duplicate processing
> > 3- run the procedure (build_contributions_clusters) over the range of
> > selected ids
> >
> > --The query I use:
> > With ids as( delete from wait4processing where id in( select id from
> > wait4processing limit 500) returning id)
> > select build_contributions_clusters(min(id),max(id)) from ids;
> >
> > The query runs properly if I send it sequentially (wait for the
> > completion of the query before sening it again) but it does'nt work
> > when sending multiple occurrences in parallel. Seems from the results I
> > got that the first query received by the server runs properly but the
> > following ones try to process the same first 500 records even if deleted
> > - the build_contributions_clusters procedure receive NULL values instead
> > of the following 500 records.
> >
> > Since I am almost certain it is the expected behavior, I would like to
> > like to understand why, and I would also appreciate to
> > see alternative queries to do the job.
>
> See here:
>
> http://www.postgresql.org/docs/9.4/interactive/transaction-iso.html
>
> "13.2.1. Read Committed Isolation Level
>
> Read Committed is the default isolation level in PostgreSQL. When a
> transaction uses this isolation level, a SELECT query (without a FOR
> UPDATE/SHARE clause) sees only data committed before the query began; it
> never sees either uncommitted data or changes committed during query
> execution by concurrent transactions. In effect, a SELECT query sees a
> snapshot of the database as of the instant the query begins to run.
> However, SELECT does see the effects of previous updates executed within
> its own transaction, even though they are not yet committed. Also note
> that two successive SELECT commands can see different data, even though
> they are within a single transaction, if other transactions commit
> changes after the first SELECT starts and before the second SELECT starts."
>
> >
> > Thanks :-)
>
>
> --
> Adrian Klaver
> adrian(dot)klaver(at)aklaver(dot)com
>
>
> --
> Sent via pgsql-general mailing list (pgsql-general(at)postgresql(dot)org)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general

In response to

Browse pgsql-general by date

  From Date Subject
Next Message jimbosworth 2015-10-05 13:46:36 Re: Best way to sync table DML between databases
Previous Message Bill Moran 2015-10-05 13:24:26 Re: Best way to sync table DML between databases