Re: Does setval(nextval()+N) generate unique blocks of IDs?

From: Craig James <cjames(at)emolecules(dot)com>
To: Scott Marlowe <scott(dot)marlowe(at)gmail(dot)com>
Cc: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, pgsql-performance(at)postgresql(dot)org
Subject: Re: Does setval(nextval()+N) generate unique blocks of IDs?
Date: 2012-08-21 20:59:06
Message-ID: CAFwQ8rdSsamoNoTcmZiscBh8C8CHVypfcooCt+HHBW+5ERqO1Q@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-performance

On Tue, Aug 21, 2012 at 1:03 PM, Scott Marlowe <scott(dot)marlowe(at)gmail(dot)com> wrote:
> That seems unnecessarily complex. how about this:
>
> create sequence s;
> select array_agg (a.b) from (select nextval('s') as b from
> generate_series(1,1000)) as a;
>
> Then you just iterate that array for the ids you need.

For brevity I didn't explain the use-case in detail. I need a series
of IDs that are unique across a cluster of servers and across time
(years and decades). The blocksize might be anywhere from 1 to
100000. One server is the master and issues all IDs.

I don't want to iterate over an array to get the values because it's
inefficient: if the blocksize is large (say, 100000 items), it will
require 100000 select() statements. The solution using an advisory
lock along with setvalue() is nice because the application only makes
one select() statement and gets a block of IDs that are guaranteed to
be unique across the cluster.

Craig

In response to

Responses

Browse pgsql-performance by date

  From Date Subject
Next Message Scott Marlowe 2012-08-21 21:06:56 Re: Does setval(nextval()+N) generate unique blocks of IDs?
Previous Message Stephen Frost 2012-08-21 20:27:02 Re: average query performance measuring