Search Postgresql Archives

Re: Unexpected query result

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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

> Subject: Re: Unexpected query result
> To: jfd553@xxxxxxxxxxx; pgsql-general@xxxxxxxxxxxxxx
> From: adrian.klaver@xxxxxxxxxxx
> 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.klaver@xxxxxxxxxxx
>
>
> --
> Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
> To make changes to your subscription:
> http://www.postgresql.org/mailpref/pgsql-general

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux