Re: Does setval(nextval()+N) generate unique blocks of IDs? - Mailing list pgsql-performance

From Craig James
Subject Re: Does setval(nextval()+N) generate unique blocks of IDs?
Date
Msg-id CAFwQ8rdSsamoNoTcmZiscBh8C8CHVypfcooCt+HHBW+5ERqO1Q@mail.gmail.com
Whole thread Raw
In response to Re: Does setval(nextval()+N) generate unique blocks of IDs?  (Scott Marlowe <scott.marlowe@gmail.com>)
Responses Re: Does setval(nextval()+N) generate unique blocks of IDs?
List pgsql-performance
On Tue, Aug 21, 2012 at 1:03 PM, Scott Marlowe <scott.marlowe@gmail.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


pgsql-performance by date:

Previous
From: Stephen Frost
Date:
Subject: Re: average query performance measuring
Next
From: Scott Marlowe
Date:
Subject: Re: Does setval(nextval()+N) generate unique blocks of IDs?